]> git.saurik.com Git - wxWidgets.git/blob - include/wx/filefn.h
Added a bug report; C++Builder compile fixes
[wxWidgets.git] / include / wx / filefn.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: filefn.h
3 // Purpose: File- and directory-related functions
4 // Author: Julian Smart
5 // Modified by:
6 // Created: 29/01/98
7 // RCS-ID: $Id$
8 // Copyright: (c) 1998 Julian Smart
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _FILEFN_H_
13 #define _FILEFN_H_
14
15 #ifdef __GNUG__
16 #pragma interface "filefn.h"
17 #endif
18
19 #include "wx/list.h"
20
21 // ----------------------------------------------------------------------------
22 // constants
23 // ----------------------------------------------------------------------------
24
25 // define off_t
26 #ifndef __WXMAC__
27 #include <sys/types.h>
28 #else
29 typedef long off_t;
30 #endif
31
32 #if defined(__VISUALC__) || ( defined(__MWERKS__) && defined( __INTEL__) )
33 typedef _off_t off_t;
34 #elif defined(__BORLANDC__) && defined(__WIN16__)
35 typedef long off_t;
36 #elif defined(__SC__)
37 typedef long off_t;
38 #elif defined(__MWERKS__) && !defined(__INTEL__)
39 typedef long off_t;
40 #endif
41
42 const off_t wxInvalidOffset = (off_t)-1;
43
44 enum wxSeekMode
45 {
46 wxFromStart,
47 wxFromCurrent,
48 wxFromEnd
49 };
50
51 WXDLLEXPORT_DATA(extern const wxChar*) wxEmptyString;
52
53 // ----------------------------------------------------------------------------
54 // functions
55 // ----------------------------------------------------------------------------
56 WXDLLEXPORT bool wxFileExists(const wxString& filename);
57 #define FileExists wxFileExists
58
59 // does the path exist? (may have or not '/' or '\\' at the end)
60 WXDLLEXPORT bool wxPathExists(const wxChar *pszPathName);
61
62 #define wxDirExists wxPathExists
63 #define DirExists wxDirExists
64
65 WXDLLEXPORT bool wxIsAbsolutePath(const wxString& filename);
66 #define IsAbsolutePath wxIsAbsolutePath
67
68 // Get filename
69 WXDLLEXPORT wxChar* wxFileNameFromPath(wxChar *path);
70 WXDLLEXPORT wxString wxFileNameFromPath(const wxString& path);
71 #define FileNameFromPath wxFileNameFromPath
72
73 // Get directory
74 WXDLLEXPORT wxString wxPathOnly(const wxString& path);
75 #define PathOnly wxPathOnly
76
77 // wxString version
78 WXDLLEXPORT wxString wxRealPath(const wxString& path);
79
80 WXDLLEXPORT void wxDos2UnixFilename(wxChar *s);
81 #define Dos2UnixFilename wxDos2UnixFilename
82
83 WXDLLEXPORT void wxUnix2DosFilename(wxChar *s);
84 #define Unix2DosFilename wxUnix2DosFilename
85
86 #ifdef __WXMAC__
87 WXDLLEXPORT wxString wxMacFSSpec2MacFilename( const FSSpec *spec ) ;
88 WXDLLEXPORT wxString wxMacFSSpec2UnixFilename( const FSSpec *spec ) ;
89 WXDLLEXPORT void wxUnixFilename2FSSpec( const char *path , FSSpec *spec ) ;
90 WXDLLEXPORT void wxMacFilename2FSSpec( const char *path , FSSpec *spec ) ;
91 WXDLLEXPORT wxString wxMac2UnixFilename( const char *s) ;
92 WXDLLEXPORT wxString wxUnix2MacFilename( const char *s);
93 #endif
94
95 // Strip the extension, in situ
96 WXDLLEXPORT void wxStripExtension(wxChar *buffer);
97 WXDLLEXPORT void wxStripExtension(wxString& buffer);
98
99 // Get a temporary filename, opening and closing the file.
100 WXDLLEXPORT wxChar* wxGetTempFileName(const wxString& prefix, wxChar *buf = (wxChar *) NULL);
101
102 // Expand file name (~/ and ${OPENWINHOME}/ stuff)
103 WXDLLEXPORT wxChar* wxExpandPath(wxChar *dest, const wxChar *path);
104
105 // Contract w.r.t environment (</usr/openwin/lib, OPENWHOME> -> ${OPENWINHOME}/lib)
106 // and make (if under the home tree) relative to home
107 // [caller must copy-- volatile]
108 WXDLLEXPORT wxChar* wxContractPath(const wxString& filename,
109 const wxString& envname = wxEmptyString,
110 const wxString& user = wxEmptyString);
111
112 // Destructive removal of /./ and /../ stuff
113 WXDLLEXPORT wxChar* wxRealPath(wxChar *path);
114
115 // Allocate a copy of the full absolute path
116 WXDLLEXPORT wxChar* wxCopyAbsolutePath(const wxString& path);
117
118 // Get first file name matching given wild card.
119 // Flags are reserved for future use.
120 #define wxFILE 1
121 #define wxDIR 2
122 WXDLLEXPORT wxString wxFindFirstFile(const wxChar *spec, int flags = wxFILE);
123 WXDLLEXPORT wxString wxFindNextFile();
124
125 // Does the pattern contain wildcards?
126 WXDLLEXPORT bool wxIsWild(const wxString& pattern);
127
128 // Does the pattern match the text (usually a filename)?
129 // If dot_special is TRUE, doesn't match * against . (eliminating
130 // `hidden' dot files)
131 WXDLLEXPORT bool wxMatchWild(const wxString& pattern, const wxString& text, bool dot_special = TRUE);
132
133 // Concatenate two files to form third
134 WXDLLEXPORT bool wxConcatFiles(const wxString& file1, const wxString& file2, const wxString& file3);
135
136 // Copy file1 to file2
137 WXDLLEXPORT bool wxCopyFile(const wxString& file1, const wxString& file2);
138
139 // Remove file
140 WXDLLEXPORT bool wxRemoveFile(const wxString& file);
141
142 // Rename file
143 WXDLLEXPORT bool wxRenameFile(const wxString& file1, const wxString& file2);
144
145 // Get current working directory.
146 // If buf is NULL, allocates space using new, else
147 // copies into buf.
148 // IMPORTANT NOTE getcwd is know not to work under some releases
149 // of Win32s 1.3, according to MS release notes!
150 WXDLLEXPORT wxChar* wxGetWorkingDirectory(wxChar *buf = (wxChar *) NULL, int sz = 1000);
151 // new and preferred version of wxGetWorkingDirectory
152 // NB: can't have the same name because of overloading ambiguity
153 WXDLLEXPORT wxString wxGetCwd();
154
155 // Set working directory
156 WXDLLEXPORT bool wxSetWorkingDirectory(const wxString& d);
157
158 // Make directory
159 WXDLLEXPORT bool wxMkdir(const wxString& dir, int perm = 0777);
160
161 // Remove directory. Flags reserved for future use.
162 WXDLLEXPORT bool wxRmdir(const wxString& dir, int flags = 0);
163
164 // separators in file names
165 #define wxFILE_SEP_EXT wxT('.')
166 #define wxFILE_SEP_DSK wxT(':')
167 #define wxFILE_SEP_PATH_DOS wxT('\\')
168 #define wxFILE_SEP_PATH_UNIX wxT('/')
169
170 // separator in the path list (as in PATH environment variable)
171 // NB: these are strings and not characters on purpose!
172 #define wxPATH_SEP_DOS wxT(";")
173 #define wxPATH_SEP_UNIX wxT(":")
174
175 // platform independent versions
176 #ifdef __UNIX__
177 #define wxFILE_SEP_PATH wxFILE_SEP_PATH_UNIX
178 #define wxPATH_SEP wxPATH_SEP_UNIX
179 #else // Windows and OS/2
180 #define wxFILE_SEP_PATH wxFILE_SEP_PATH_DOS
181 #define wxPATH_SEP wxPATH_SEP_DOS
182 #endif // Unix/Windows
183
184 // this is useful for wxString::IsSameAs(): to compare two file names use
185 // filename1.IsSameAs(filename2, wxARE_FILENAMES_CASE_SENSITIVE)
186 #ifdef __UNIX__
187 #define wxARE_FILENAMES_CASE_SENSITIVE TRUE
188 #else // Windows and OS/2
189 #define wxARE_FILENAMES_CASE_SENSITIVE FALSE
190 #endif // Unix/Windows
191
192 // is the char a path separator?
193 inline bool wxIsPathSeparator(wxChar c)
194 { return c == wxFILE_SEP_PATH_DOS || c == wxFILE_SEP_PATH_UNIX; }
195
196 // does the string ends with path separator?
197 WXDLLEXPORT bool wxEndsWithPathSeparator(const wxChar *pszFileName);
198
199 // split the full path into path (including drive for DOS), name and extension
200 // (understands both '/' and '\\')
201 WXDLLEXPORT void wxSplitPath(const wxChar *pszFileName,
202 wxString *pstrPath,
203 wxString *pstrName,
204 wxString *pstrExt);
205
206 // find a file in a list of directories, returns false if not found
207 WXDLLEXPORT bool wxFindFileInPath(wxString *pStr, const wxChar *pszPath, const wxChar *pszFile);
208
209 // Get the OS directory if appropriate (such as the Windows directory).
210 // On non-Windows platform, probably just return the empty string.
211 WXDLLEXPORT wxString wxGetOSDirectory();
212
213 // ----------------------------------------------------------------------------
214 // classes
215 // ----------------------------------------------------------------------------
216
217 // Path searching
218 class WXDLLEXPORT wxPathList : public wxStringList
219 {
220 public:
221 // Adds all paths in environment variable
222 void AddEnvList(const wxString& envVariable);
223
224 void Add(const wxString& path);
225 // Avoid compiler warning
226 wxNode *Add(const wxChar *s) { return wxStringList::Add(s); }
227 // Find the first full path for which the file exists
228 wxString FindValidPath(const wxString& filename);
229 // Find the first full path for which the file exists; ensure it's an
230 // absolute path that gets returned.
231 wxString FindAbsoluteValidPath(const wxString& filename);
232 // Given full path and filename, add path to list
233 void EnsureFileAccessible(const wxString& path);
234 // Returns TRUE if the path is in the list
235 bool Member(const wxString& path);
236
237 private:
238 DECLARE_DYNAMIC_CLASS(wxPathList)
239 };
240
241 #endif
242 // _WX_FILEFN_H_