]>
git.saurik.com Git - wxWidgets.git/blob - interface/wx/dir.h
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: interface of wxDir and wxDirTraverser
4 // Author: wxWidgets team
5 // Licence: wxWindows licence
6 /////////////////////////////////////////////////////////////////////////////
9 Possible return values of wxDirTraverser callback functions.
11 enum wxDirTraverseResult
13 wxDIR_IGNORE
= -1, ///< Ignore this directory but continue with others.
14 wxDIR_STOP
, ///< Stop traversing.
15 wxDIR_CONTINUE
///< Continue into this directory.
21 wxDirTraverser is an abstract interface which must be implemented by
22 objects passed to wxDir::Traverse() function.
24 Example of use (this works almost like wxDir::GetAllFiles()):
27 class wxDirTraverserSimple : public wxDirTraverser
30 wxDirTraverserSimple(wxArrayString& files) : m_files(files) { }
32 virtual wxDirTraverseResult OnFile(const wxString& filename)
34 m_files.Add(filename);
35 return wxDIR_CONTINUE;
38 virtual wxDirTraverseResult OnDir(const wxString& WXUNUSED(dirname))
40 return wxDIR_CONTINUE;
44 wxArrayString& m_files;
47 // get the names of all files in the array
49 wxDirTraverserSimple traverser(files);
52 dir.Traverse(traverser);
62 This function is called for each directory. It may return ::wxDIR_STOP
63 to abort traversing completely, ::wxDIR_IGNORE to skip this directory
64 but continue with others or ::wxDIR_CONTINUE to enumerate all files and
65 subdirectories in this directory.
67 This is a pure virtual function and must be implemented in the derived
70 virtual wxDirTraverseResult
OnDir(const wxString
& dirname
) = 0;
73 This function is called for each file. It may return ::wxDIR_STOP to
74 abort traversing (for example, if the file being searched is found) or
75 ::wxDIR_CONTINUE to proceed.
77 This is a pure virtual function and must be implemented in the derived
80 virtual wxDirTraverseResult
OnFile(const wxString
& filename
) = 0;
83 This function is called for each directory which we failed to open for
84 enumerating. It may return ::wxDIR_STOP to abort traversing completely,
85 ::wxDIR_IGNORE to skip this directory but continue with others or
86 ::wxDIR_CONTINUE to retry opening this directory once again.
88 The base class version always returns ::wxDIR_IGNORE.
90 virtual wxDirTraverseResult
OnOpenError(const wxString
& openerrorname
);
96 These flags affect the behaviour of GetFirst/GetNext() and Traverse(),
97 determining what types are included in the list of items they produce.
101 wxDIR_FILES
= 0x0001, ///< Includes files.
102 wxDIR_DIRS
= 0x0002, ///< Includes directories.
103 wxDIR_HIDDEN
= 0x0004, ///< Includes hidden files.
104 wxDIR_DOTDOT
= 0x0008, ///< Includes "." and "..".
107 Don't follow symbolic links during the directory traversal.
109 This flag is ignored under systems not supporting symbolic links (i.e.
112 Notice that this flag is @e not included in wxDIR_DEFAULT and so the
113 default behaviour of wxDir::Traverse() is to follow symbolic links,
114 even if they lead outside of the directory being traversed.
118 wxDIR_NO_FOLLOW
= 0x0010,
121 Default directory traversal flags include both files and directories,
124 Notice that by default wxDIR_NO_FOLLOW is @e not included, meaning that
125 symbolic links are followed by default. If this is not desired, you
126 must pass that flag explicitly.
128 wxDIR_DEFAULT
= wxDIR_FILES
| wxDIR_DIRS
| wxDIR_HIDDEN
134 wxDir is a portable equivalent of Unix open/read/closedir functions which
135 allow enumerating of the files in a directory. wxDir allows to enumerate
136 files as well as directories.
138 wxDir also provides a flexible way to enumerate files recursively using
139 Traverse() or a simpler GetAllFiles() function.
144 wxDir dir(wxGetCwd());
146 if ( !dir.IsOpened() )
148 // deal with the error here - wxDir would already log an error message
149 // explaining the exact reason of the failure
153 puts("Enumerating object files in current directory:");
157 bool cont = dir.GetFirst(&filename, filespec, flags);
160 printf("%s\n", filename.c_str());
162 cont = dir.GetNext(&filename);
173 Default constructor, use Open() afterwards.
177 Opens the directory for enumeration, use IsOpened() to test for errors.
179 wxDir(const wxString
& dir
);
182 Destructor cleans up the associated resources by calling Close().
184 It is not virtual and so this class is not meant to be used
192 The object can't be used after closing it, but Open() may be called
193 again to reopen it later.
200 Test for existence of a directory with the given name.
202 static bool Exists(const wxString
& dir
);
205 The function returns the path of the first file matching the given
206 @a filespec or an empty string if there are no files matching it.
208 The @a flags parameter may or may not include ::wxDIR_FILES, the
209 function always behaves as if it were specified. By default, @a flags
210 includes ::wxDIR_DIRS and so the function recurses into the
211 subdirectories but if this flag is not specified, the function
212 restricts the search only to the directory @a dirname itself.
213 See ::wxDirFlags for the list of the possible flags.
217 static wxString
FindFirst(const wxString
& dirname
,
218 const wxString
& filespec
,
219 int flags
= wxDIR_DEFAULT
);
222 The function appends the names of all the files under directory
223 @a dirname to the array @a files (note that its old content is
224 preserved). Only files matching the @a filespec are taken, with empty
225 spec matching all the files.
227 The @a flags parameter should always include ::wxDIR_FILES or the array
228 would be unchanged and should include ::wxDIR_DIRS flag to recurse into
229 subdirectories (both flags are included in the value by default).
230 See ::wxDirFlags for the list of the possible flags.
232 @return Returns the total number of files found while traversing
233 the directory @a dirname (i.e. the number of entries appended
234 to the @a files array).
238 static size_t GetAllFiles(const wxString
& dirname
, wxArrayString
* files
,
239 const wxString
& filespec
= wxEmptyString
,
240 int flags
= wxDIR_DEFAULT
);
243 Start enumerating all files matching @a filespec (or all files if it is
244 empty) and @e flags, return @true on success.
245 See ::wxDirFlags for the list of the possible flags.
247 bool GetFirst(wxString
* filename
,
248 const wxString
& filespec
= wxEmptyString
,
249 int flags
= wxDIR_DEFAULT
) const;
252 Returns the name of the directory itself.
254 The returned string does not have the trailing path separator (slash or
257 Notice that in spite of this the last character of the returned string
258 can still be the path separator if this directory is the root one.
259 Because of this, don't append @c wxFILE_SEP_PATH to the returned value
260 if you do need a slash-terminated directory name but use
261 GetNameWithSep() instead to avoid having duplicate consecutive slashes.
263 wxString
GetName() const;
266 Returns the name of the directory with the path separator appended.
268 The last character of the returned string is always @c wxFILE_SEP_PATH
269 unless the string is empty, indicating that this directory is invalid.
275 wxString
GetNameWithSep() const;
278 Continue enumerating files which satisfy the criteria specified by the
279 last call to GetFirst().
281 bool GetNext(wxString
* filename
) const;
284 Returns the size (in bytes) of all files recursively found in @c dir or
285 @c wxInvalidSize in case of error.
287 In case it happens that while traversing folders a file's size cannot
288 be read, that file is added to the @a filesSkipped array, if not @NULL,
289 and then skipped. This usually happens with some special folders which
290 are locked by the operating system or by another process. Remember that
291 when the size of @a filesSkipped is not zero, then the returned value
292 is not 100% accurate and, if the skipped files were big, it could be
293 far from real size of the directory.
295 @see wxFileName::GetHumanReadableSize(), wxGetDiskSpace()
297 static wxULongLong
GetTotalSize(const wxString
& dir
,
298 wxArrayString
* filesSkipped
= NULL
);
301 Returns @true if the directory contains any files matching the given
302 @a filespec. If @a filespec is empty, look for any files at all. In any
303 case, even hidden files are taken into account.
305 bool HasFiles(const wxString
& filespec
= wxEmptyString
) const;
308 Returns @true if the directory contains any subdirectories (if a non
309 empty @a filespec is given, only check for directories matching it).
310 The hidden subdirectories are taken into account as well.
312 bool HasSubDirs(const wxString
& dirspec
= wxEmptyString
) const;
315 Returns @true if the directory was successfully opened by a previous
318 bool IsOpened() const;
323 This is just an alias for wxFileName::Mkdir(); refer to that function
326 static bool Make(const wxString
&dir
, int perm
= wxS_DIR_DEFAULT
,
330 Open the directory for enumerating, returns @true on success or @false
331 if an error occurred.
333 bool Open(const wxString
& dir
);
338 This is just an alias for wxFileName::Rmdir(); refer to that function
341 static bool Remove(const wxString
&dir
, int flags
= 0);
344 Enumerate all files and directories under the given directory.
346 If @a flags contains ::wxDIR_DIRS this enumeration is recursive, i.e.
347 all the subdirectories of the given one and the files inside them will
348 be traversed. Otherwise only the files in this directory itself are.
350 If @a flags doesn't contain ::wxDIR_FILES then only subdirectories are
351 examined but not normal files. It doesn't make sense to not specify
352 either ::wxDIR_DIRS or ::wxDIR_FILES and usually both of them should be
353 specified, as is the case by default.
355 For each directory found, @ref wxDirTraverser::OnDir() "sink.OnDir()"
356 is called and @ref wxDirTraverser::OnFile() "sink.OnFile()" is called
357 for every file. Depending on the return value, the enumeration may
358 continue or stop. If entering a subdirectory fails, @ref
359 wxDirTraverser::OnOpenError() "sink.OnOpenError()" is called.
361 The function returns the total number of files found or @c "(size_t)-1"
364 See ::wxDirFlags for the full list of the possible flags.
368 size_t Traverse(wxDirTraverser
& sink
,
369 const wxString
& filespec
= wxEmptyString
,
370 int flags
= wxDIR_DEFAULT
) const;