wxWidgets/include/wx/ffile.h
Vadim Zeitlin a1b82138ef 1. new wxFFile class - as wxFile but uses fopen/fread/fseek... instead of
open/read/seek...
2. wxTextCtrlBase appears, several bug fixes in MSW wxTextCtrl and made
   LoadFile() behave in the same way under GTK and MSW (fixed it for MSW
   too)
3. Corrected the sash position calculation in sashwin.cpp - seems to work
   now but I wonder how it could ever work before?
4. new, tmake generated, MSW makefiles. They probably don't work - will fix
   them as soon as people start complaining.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3004 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
1999-07-14 22:55:57 +00:00

115 lines
3.5 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: ffile.h
// Purpose: wxFFile - encapsulates "FILE *" stream
// Author: Vadim Zeitlin
// Modified by:
// Created: 14.07.99
// RCS-ID: $Id$
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_FFILE_H_
#define _WX_FFILE_H_
#ifdef __GNUG__
#pragma interface "ffile.h"
#endif
#if wxUSE_FILE
#ifndef WX_PRECOMP
#include "wx/string.h"
#include "wx/filefn.h"
#endif
#include <stdio.h>
// ----------------------------------------------------------------------------
// class wxFFile: standard C stream library IO
//
// NB: for space efficiency this class has no virtual functions, including
// dtor which is _not_ virtual, so it shouldn't be used as a base class.
// ----------------------------------------------------------------------------
class WXDLLEXPORT wxFFile
{
public:
// ctors
// -----
// def ctor
wxFFile() { m_fp = NULL; }
// open specified file (may fail, use IsOpened())
wxFFile(const wxChar *filename, const char *mode = "r");
// attach to (already opened) file
wxFFile(FILE *fp) { m_fp = fp; }
// open/close
// open a file (existing or not - the mode controls what happens)
bool Open(const wxChar *filename, const char *mode = "r");
// closes the opened file (this is a NOP if not opened)
bool Close();
// assign an existing file descriptor and get it back from wxFFile object
void Attach(FILE *fp, const wxString& name = _T(""))
{ Close(); m_fp = fp; m_name = name; }
void Detach() { m_fp = NULL; }
FILE *fp() const { return m_fp; }
// read/write (unbuffered)
// read all data from the file into a string (useful for text files)
bool ReadAll(wxString *str);
// 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);
// returns the number of bytes written
size_t Write(const void *pBuf, size_t nCount);
// returns true on success
bool Write(const wxString& s)
{
size_t size = s.Len()*sizeof(wxChar);
return Write(s.c_str(), size) == size;
}
// flush data not yet written
bool Flush();
// file pointer operations (return ofsInvalid on failure)
// move ptr ofs bytes related to start/current pos/end of file
bool Seek(long ofs, wxSeekMode mode = wxFromStart);
// move ptr to ofs bytes before the end
bool SeekEnd(long ofs = 0) { return Seek(ofs, wxFromEnd); }
// get current position in the file
size_t Tell() const;
// get current file length
size_t Length() const;
// simple accessors
// is file opened?
bool IsOpened() const { return m_fp != NULL; }
// is end of file reached?
bool Eof() const { return feof(m_fp) != 0; }
// is an error occured?
bool Error() const { return ferror(m_fp) != 0; }
// get the file name
const wxString& GetName() const { return m_name; }
// dtor closes the file if opened
~wxFFile() { Close(); }
private:
// copy ctor and assignment operator are private because it doesn't make
// sense to copy files this way: attempt to do it will provoke a compile-time
// error.
wxFFile(const wxFFile&);
wxFFile& operator=(const wxFFile&);
FILE *m_fp; // IO stream or NULL if not opened
wxString m_name; // the name of the file (for diagnostic messages)
};
#endif // wxUSE_FILE
#endif // _WX_FFILE_H_