diff --git a/src/common/docview.cpp b/src/common/docview.cpp index 2178babf42..10435410e8 100644 --- a/src/common/docview.cpp +++ b/src/common/docview.cpp @@ -41,6 +41,7 @@ #include "wx/filedlg.h" #include "wx/intl.h" #include "wx/log.h" + #include "wx/ffile.h" #endif @@ -295,10 +296,10 @@ bool wxDocument::OnSaveDocument(const wxString& file) msgTitle = wxString(_("File error")); #if wxUSE_STD_IOSTREAM - wxSTD ofstream store(wxString(file.fn_str()).mb_str()); // ????? + wxSTD ofstream store(file.mb_str()); if (store.fail() || store.bad()) #else - wxFileOutputStream store( file ); + wxFileOutputStream store(file); if (store.GetLastError() != wxSTREAM_NO_ERROR) #endif { @@ -332,10 +333,10 @@ bool wxDocument::OnOpenDocument(const wxString& file) msgTitle = wxString(_("File error")); #if wxUSE_STD_IOSTREAM - wxSTD ifstream store(wxString(file.fn_str()).mb_str()); // ???? + wxSTD ifstream store(file.mb_str()); if (store.fail() || store.bad()) #else - wxFileInputStream store( file ); + wxFileInputStream store(file); if (store.GetLastError() != wxSTREAM_NO_ERROR) #endif { @@ -2163,77 +2164,99 @@ void wxFileHistory::AddFilesToMenu(wxMenu* menu) // ---------------------------------------------------------------------------- #if wxUSE_STD_IOSTREAM + bool wxTransferFileToStream(const wxString& filename, wxSTD ostream& stream) { - FILE *fd1; - int ch; - - if ((fd1 = wxFopen (filename.fn_str(), _T("rb"))) == NULL) + wxFFile file(filename, "rb"); + if ( !file.IsOpened() ) return FALSE; - while ((ch = getc (fd1)) != EOF) - stream << (unsigned char)ch; + char buf[4096]; + + size_t nRead; + do + { + nRead = file.Read(buf, WXSIZEOF(buf)); + if ( file.Error() ) + return FALSE; + + stream.write(buf, nRead); + if ( !stream ) + return FALSE; + } + while ( !file.Eof() ); - fclose (fd1); return TRUE; } bool wxTransferStreamToFile(wxSTD istream& stream, const wxString& filename) { - FILE *fd1; - int ch; - - if ((fd1 = wxFopen (filename.fn_str(), _T("wb"))) == NULL) - { + wxFFile file(filename, "wb"); + if ( !file.IsOpened() ) return FALSE; - } - while (!stream.eof()) + char buf[4096]; + do { - ch = stream.get(); - if (!stream.eof()) - putc (ch, fd1); + stream.read(buf, WXSIZEOF(buf)); + if ( !stream.bad() ) // fail may be set on EOF, don't use operator!() + { + if ( !file.Write(buf, stream.gcount()) ) + return FALSE; + } } - fclose (fd1); + while ( !stream.eof() ); + return TRUE; } -#else + +#else // !wxUSE_STD_IOSTREAM + bool wxTransferFileToStream(const wxString& filename, wxOutputStream& stream) { - FILE *fd1; - int ch; - - if ((fd1 = wxFopen (filename, wxT("rb"))) == NULL) + wxFFile file(filename, "rb"); + if ( !file.IsOpened() ) return FALSE; - while ((ch = getc (fd1)) != EOF) - stream.PutC((char) ch); + char buf[4096]; + + size_t nRead; + do + { + nRead = file.Read(buf, WXSIZEOF(buf)); + if ( file.Error() ) + return FALSE; + + stream.Write(buf, nRead); + if ( !stream ) + return FALSE; + } + while ( !file.Eof() ); - fclose (fd1); return TRUE; } bool wxTransferStreamToFile(wxInputStream& stream, const wxString& filename) { - FILE *fd1; - char ch; - - if ((fd1 = wxFopen (filename, wxT("wb"))) == NULL) - { + wxFFile file(filename, "wb"); + if ( !file.IsOpened() ) return FALSE; - } - int len = stream.GetSize(); - // TODO: is this the correct test for EOF? - while (stream.TellI() < (len - 1)) + char buf[4096]; + do { - ch = stream.GetC(); - putc (ch, fd1); + stream.Read(buf, WXSIZEOF(buf)); + + const size_t nRead = stream.LastRead(); + if ( !nRead || !file.Write(buf, nRead) ) + return FALSE; } - fclose (fd1); + while ( !stream.Eof() ); + return TRUE; } -#endif + +#endif // wxUSE_STD_IOSTREAM/!wxUSE_STD_IOSTREAM #endif // wxUSE_DOC_VIEW_ARCHITECTURE