]> git.saurik.com Git - wxWidgets.git/blame - include/wx/file.h
scrollbar support added (experimental)
[wxWidgets.git] / include / wx / file.h
CommitLineData
c801d85f
KB
1/////////////////////////////////////////////////////////////////////////////
2// Name: file.cpp
3// Purpose: wxFile - encapsulates low-level "file descriptor"
4// wxTempFile - safely replace the old file
5// Author: Vadim Zeitlin
6// Modified by:
7// Created: 29/01/98
8// RCS-ID: $Id$
9// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
10// Licence: wxWindows license
11/////////////////////////////////////////////////////////////////////////////
12
13#ifndef __FILEH__
14#define __FILEH__
15
16#ifdef __GNUG__
17#pragma interface "file.h"
18#endif
19
151ccd11
RR
20#include "wx/string.h"
21#include "wx/filefn.h"
c801d85f
KB
22
23// ----------------------------------------------------------------------------
24// constants
25// ----------------------------------------------------------------------------
26
27// error return value for Seek() functions
28const off_t ofsInvalid = (off_t)-1;
29
30// ----------------------------------------------------------------------------
31// class wxFile: raw file IO
32//
33// NB: for space efficiency this class has no virtual functions, including
34// dtor which is _not_ virtual, so it shouldn't be used as a base class.
35// ----------------------------------------------------------------------------
36class WXDLLEXPORT wxFile
37{
38public:
39 // more file constants
40 // -------------------
41
42 // opening mode
61b02744 43 enum OpenMode { read, write, read_write, write_append };
c801d85f
KB
44 // standard values for file descriptor
45 enum { fd_invalid = -1, fd_stdin, fd_stdout, fd_stderr };
c801d85f
KB
46
47 // static functions
48 // ----------------
49 static bool Exists(const char *sz); // also checks it's a regular file
50
51 // ctors
52 // -----
53 // def ctor
54 wxFile() { m_fd = fd_invalid; }
55 // open specified file (may fail, use IsOpened())
56 wxFile(const char *szFileName, OpenMode mode = read);
57 // attach to (already opened) file
58 wxFile(int fd) { m_fd = fd; }
59
60 // open/close
61 bool Create(const char *szFileName, bool bOverwrite = FALSE);
62 bool Open(const char *szFileName, OpenMode mode = read);
a1530845 63 bool Close(); // Close is a NOP if not opened
61b02744
VZ
64
65 // assign an existing file descriptor and get it back from wxFile object
c801d85f 66 void Attach(int fd) { Close(); m_fd = fd; }
61b02744
VZ
67 void Detach() { m_fd = fd_invalid; }
68 int fd() const { return m_fd; }
c801d85f
KB
69
70 // read/write (unbuffered)
71 // returns number of bytes read or ofsInvalid on error
72 off_t Read(void *pBuf, off_t nCount);
73 // returns true on success
79c3e0e1 74 uint Write(const void *pBuf, uint nCount);
c801d85f 75 // returns true on success
45ea509a 76 bool Write(const wxString& s) { return Write(s.c_str(), s.Len()) != 0; }
c801d85f
KB
77 // flush data not yet written
78 bool Flush();
79
80 // file pointer operations (return ofsInvalid on failure)
81 // move ptr ofs bytes related to start/current off_t/end of file
79c3e0e1 82 off_t Seek(off_t ofs, wxSeekMode mode = wxFromStart);
c801d85f 83 // move ptr to ofs bytes before the end
79c3e0e1 84 off_t SeekEnd(off_t ofs = 0) { return Seek(ofs, wxFromEnd); }
c801d85f
KB
85 // get current off_t
86 off_t Tell() const;
87 // get current file length
88 off_t Length() const;
89
90 // simple accessors
91 // is file opened?
92 bool IsOpened() const { return m_fd != fd_invalid; }
93 // is end of file reached?
94 bool Eof() const;
79c3e0e1
GL
95 // is an error occured?
96 bool Error() const { return m_error; }
c801d85f
KB
97
98 // dtor closes the file if opened
99 ~wxFile();
100
101private:
102 // copy ctor and assignment operator are private because
103 // it doesn't make sense to copy files this way:
104 // attempt to do it will provoke a compile-time error.
105 wxFile(const wxFile&);
106 wxFile& operator=(const wxFile&);
107
108 int m_fd; // file descriptor or INVALID_FD if not opened
79c3e0e1 109 bool m_error; // error memory
c801d85f
KB
110};
111
112// ----------------------------------------------------------------------------
113// class wxTempFile: if you want to replace another file, create an instance
114// of wxTempFile passing the name of the file to be replaced to the ctor. Then
115// you can write to wxTempFile and call Commit() function to replace the old
116// file (and close this one) or call Discard() to cancel the modification. If
117// you call neither of them, dtor will call Discard().
118// ----------------------------------------------------------------------------
119class wxTempFile
120{
121public:
122 // ctors
123 // default
124 wxTempFile() { }
125 // associates the temp file with the file to be replaced and opens it
126 wxTempFile(const wxString& strName);
127
128 // open the temp file (strName is the name of file to be replaced)
129 bool Open(const wxString& strName);
130
131 // is the file opened?
132 bool IsOpened() const { return m_file.IsOpened(); }
133
134 // I/O (both functions return true on success, false on failure)
45ea509a
VZ
135 bool Write(const void *p, uint n) { return m_file.Write(p, n) != 0; }
136 bool Write(const wxString& str) { return m_file.Write(str); }
c801d85f
KB
137
138 // different ways to close the file
139 // validate changes and delete the old file of name m_strName
140 bool Commit();
141 // discard changes
142 void Discard();
143
144 // dtor calls Discard() if file is still opened
145 ~wxTempFile();
146
147private:
148 wxString m_strName, // name of the file to replace in Commit()
149 m_strTemp; // temporary file name
150 wxFile m_file; // the temporary file
151};
152
153#endif
45ea509a 154 // __FILEH__