From 3e15dde39639521641eef1508c2de56ebd5ac319 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 19 Feb 2005 15:53:04 +0000 Subject: [PATCH] added wxMBConv parameter for wxFFile::ReadAll() and documented it (improved patch 1041642) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32187 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 1 + docs/latex/wx/ffile.tex | 18 ++++++++++++++++++ include/wx/ffile.h | 2 +- src/common/ffile.cpp | 26 +++++++++----------------- 4 files changed, 29 insertions(+), 18 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index bffd44543c..6f30ee8830 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -51,6 +51,7 @@ All: - Various changes to how wxListCtrl and wxTreeCtrl react to right mouse clicks and left mouse click for starting a drag operation. - "Alt" key (VK_MENU) now results in WXK_ALT keyboard event, not WXK_MENU +- wxFFile::ReadAll() now takes an optional wxMBConv parameter All (GUI): diff --git a/docs/latex/wx/ffile.tex b/docs/latex/wx/ffile.tex index 3db99c9ffd..569fa17f0a 100644 --- a/docs/latex/wx/ffile.tex +++ b/docs/latex/wx/ffile.tex @@ -208,6 +208,24 @@ Reads the specified number of bytes into a buffer, returning the actual number r The number of bytes read. +\membersection{wxFFile::ReadAll}\label{wxffilereadall} + +\func{bool}{ReadAll}{\param{wxString *}{ str}, \param{wxMBConv\&}{ conv = wxConvUTF8}} + +Reads the entire contents of the file into a string. + +\wxheading{Parameters} + +\docparam{str}{String to read data into.} + +\docparam{conv}{Conversion object to use in Unicode build; by default supposes +that file contents is encoded in UTF-8.} + +\wxheading{Return value} + +\true if file was read successfully, \false otherwise. + + \membersection{wxFFile::Seek}\label{wxffileseek} \func{bool}{Seek}{\param{wxFileOffset }{ofs}, \param{wxSeekMode }{mode = wxFromStart}} diff --git a/include/wx/ffile.h b/include/wx/ffile.h index f61a97fd29..6b63bded48 100644 --- a/include/wx/ffile.h +++ b/include/wx/ffile.h @@ -60,7 +60,7 @@ public: // read/write (unbuffered) // read all data from the file into a string (useful for text files) - bool ReadAll(wxString *str); + bool ReadAll(wxString *str, wxMBConv& conv = wxConvUTF8); // returns number of bytes read - use Eof() and Error() to see if an error // occured or not size_t Read(void *pBuf, size_t nCount); diff --git a/src/common/ffile.cpp b/src/common/ffile.cpp index 736bbea55f..42a43f2cb4 100644 --- a/src/common/ffile.cpp +++ b/src/common/ffile.cpp @@ -103,7 +103,7 @@ bool wxFFile::Close() // read/write // ---------------------------------------------------------------------------- -bool wxFFile::ReadAll(wxString *str) +bool wxFFile::ReadAll(wxString *str, wxMBConv& conv) { wxCHECK_MSG( str, false, wxT("invalid parameter") ); wxCHECK_MSG( IsOpened(), false, wxT("can't read from closed file") ); @@ -113,26 +113,18 @@ bool wxFFile::ReadAll(wxString *str) clearerr(m_fp); - str->Empty(); - str->Alloc(length); - - wxChar buf[1024]; - static const size_t nSize = WXSIZEOF(buf) - 1; // -1 for trailing '\0' - while ( !Eof() ) + const size_t fileLen = Length(); + wxCharBuffer buf(fileLen + 1); + if ( (fread(buf.data(), sizeof(char), fileLen, m_fp) < fileLen) || Error() ) { - size_t nRead = fread(buf, sizeof(wxChar), nSize, m_fp); - if ( (nRead < nSize) && Error() ) - { - wxLogSysError(_("Read error on file '%s'"), m_name.c_str()); - - return false; - } - //else: just EOF + wxLogSysError(_("Read error on file '%s'"), m_name.c_str()); - buf[nRead] = 0; - *str += buf; + return false; } + buf.data()[fileLen] = 0; + *str = wxString(buf, conv); + return true; } -- 2.47.2