Make it possible to use wxFFile and wxFile interchangeably for simply reading
the entire contents of the file as a string.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72596
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
- Add wxDir::Close() method (Silverstorm82).
- Fix compilation of wxHash{Map,Set} with g++ 4.7 (Nathan Ridge).
- Fix posting large amounts of data in wxHTTP (Platonides).
+- Add wxFile::ReadAll() for consistency with wxFFile.
- Added Nepali translation (Him Prasad Gautam).
All (GUI):
#include "wx/string.h"
#include "wx/filefn.h"
-#include "wx/strconv.h"
+#include "wx/convauto.h"
// ----------------------------------------------------------------------------
// class wxFile: raw file IO
int fd() const { return m_fd; }
// read/write (unbuffered)
+ // read all data from the file into a string (useful for text files)
+ bool ReadAll(wxString *str, const wxMBConv& conv = wxConvAuto());
// returns number of bytes read or wxInvalidOffset on error
ssize_t Read(void *pBuf, size_t nCount);
// returns the number of bytes written
*/
ssize_t Read(void* buffer, size_t count);
+ /**
+ Reads the entire contents of the file into a string.
+
+ @param str
+ Non-@NULL pointer to a string to read data into.
+ @param conv
+ Conversion object to use in Unicode build; by default supposes
+ that file contents is encoded in UTF-8 but falls back to the
+ current locale encoding (or Latin-1 if it is UTF-8 too) if it is
+ not.
+
+ @return @true if file was read successfully, @false otherwise.
+
+ @since 2.9.5
+ */
+ bool ReadAll(wxString* str, const wxMBConv& conv = wxConvAuto());
+
/**
Seeks to the specified position.
// read/write
// ----------------------------------------------------------------------------
+bool wxFile::ReadAll(wxString *str, const wxMBConv& conv)
+{
+ wxCHECK_MSG( str, false, wxS("Output string must be non-NULL") );
+
+ size_t length = wx_truncate_cast(size_t, Length());
+ wxCHECK_MSG( (wxFileOffset)length == Length(), false, wxT("huge file not supported") );
+
+ wxCharBuffer buf(length);
+ char* p = buf.data();
+ for ( ;; )
+ {
+ static const unsigned READSIZE = 4096;
+
+ ssize_t read = Read(p, length > READSIZE ? READSIZE : length);
+ if ( read == wxInvalidOffset )
+ return false;
+
+ p += read;
+ }
+
+ *p = 0;
+
+ wxString strTmp(buf, conv);
+ str->swap(strTmp);
+
+ return true;
+}
+
// read
ssize_t wxFile::Read(void *pBuf, size_t nCount)
{