]>
git.saurik.com Git - wxWidgets.git/blob - interface/dir.h
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: interface of wxDirTraverser
4 // Author: wxWidgets team
6 // Licence: wxWindows license
7 /////////////////////////////////////////////////////////////////////////////
13 wxDirTraverser is an abstract interface which must be implemented by objects
14 passed to wxDir::Traverse function.
16 Example of use (this works almost like wxDir::GetAllFiles):
19 class wxDirTraverserSimple : public wxDirTraverser
22 wxDirTraverserSimple(wxArrayString& files) : m_files(files) { }
24 virtual wxDirTraverseResult OnFile(const wxString& filename)
26 m_files.Add(filename);
27 return wxDIR_CONTINUE;
30 virtual wxDirTraverseResult OnDir(const wxString& WXUNUSED(dirname))
32 return wxDIR_CONTINUE;
36 wxArrayString& m_files;
39 // get the names of all files in the array
41 wxDirTraverserSimple traverser(files);
44 dir.Traverse(traverser);
54 This function is called for each directory. It may return @c wxDIR_STOP
55 to abort traversing completely, @c wxDIR_IGNORE to skip this directory but
56 continue with others or @c wxDIR_CONTINUE to enumerate all files and
57 subdirectories in this directory.
58 This is a pure virtual function and must be implemented in the derived class.
60 virtual wxDirTraverseResult
OnDir(const wxString
& dirname
);
63 This function is called for each file. It may return @c wxDIR_STOP to abort
64 traversing (for example, if the file being searched is found) or
65 @c wxDIR_CONTINUE to proceed.
66 This is a pure virtual function and must be implemented in the derived class.
68 virtual wxDirTraverseResult
OnFile(const wxString
& filename
);
71 This function is called for each directory which we failed to open for
72 enumerating. It may return @c wxDIR_STOP to abort traversing completely,
73 @c wxDIR_IGNORE to skip this directory but continue with others or
74 @c wxDIR_CONTINUE to retry opening this directory once again.
75 The base class version always returns @c wxDIR_IGNORE.
77 virtual wxDirTraverseResult
OnOpenError(const wxString
& openerrorname
);
86 wxDir is a portable equivalent of Unix open/read/closedir functions which
87 allow enumerating of the files in a directory. wxDir allows to enumerate files
88 as well as directories.
90 wxDir also provides a flexible way to enumerate files recursively using
91 wxDir::Traverse or a simpler
92 wxDir::GetAllFiles function.
97 wxDir dir(wxGetCwd());
99 if ( !dir.IsOpened() )
101 // deal with the error here - wxDir would already log an error message
102 // explaining the exact reason of the failure
106 puts("Enumerating object files in current directory:");
110 bool cont = dir.GetFirst(, filespec, flags);
113 printf("%s\n", filename.c_str());
115 cont = dir.GetNext();
127 Opens the directory for enumeration, use IsOpened()
131 wxDir(const wxString
& dir
);
135 Destructor cleans up the associated resources. It is not virtual and so this
136 class is not meant to be used polymorphically.
141 Test for existence of a directory with the given name
143 static bool Exists(const wxString
& dir
);
146 The function returns the path of the first file matching the given @e filespec
147 or an empty string if there are no files matching it.
148 The @a flags parameter may or may not include @c wxDIR_FILES, the
149 function always behaves as if it were specified. By default, @a flags
150 includes @c wxDIR_DIRS and so the function recurses into the subdirectories
151 but if this flag is not specified, the function restricts the search only to
152 the directory @a dirname itself.
155 static wxString
FindFirst(const wxString
& dirname
,
156 const wxString
& filespec
,
157 int flags
= wxDIR_DEFAULT
);
160 The function appends the names of all the files under directory @a dirname
161 to the array @a files (note that its old content is preserved). Only files
162 matching the @a filespec are taken, with empty spec matching all the files.
163 The @a flags parameter should always include @c wxDIR_FILES or the array
164 would be unchanged and should include @c wxDIR_DIRS flag to recurse into
165 subdirectories (both flags are included in the value by default).
168 static size_t GetAllFiles(const wxString
& dirname
,
169 wxArrayString
* files
,
170 const wxString
& filespec
= wxEmptyString
,
171 int flags
= wxDIR_DEFAULT
);
174 Start enumerating all files matching @a filespec (or all files if it is
175 empty) and @e flags, return @true on success.
177 bool GetFirst(wxString
* filename
,
178 const wxString
& filespec
= wxEmptyString
,
179 int flags
= wxDIR_DEFAULT
) const;
182 Returns the name of the directory itself. The returned string does not have the
183 trailing path separator (slash or backslash).
185 wxString
GetName() const;
188 Continue enumerating files which satisfy the criteria specified by the last
191 bool GetNext(wxString
* filename
) const;
194 Returns the size (in bytes) of all files recursively found in @c dir or
195 @c wxInvalidSize in case of error.
196 In case it happens that while traversing folders a file's size can not be read,
197 that file is added to the @c filesSkipped array, if not @NULL, and then
199 This usually happens with some special folders which are locked by the
201 or by another process. Remember that when @c filesSkipped-GetCount() is not
203 then the returned value is not 100% accurate and, if the skipped files were
205 far from real size of the directory.
206 See also: wxFileName::GetHumanReadableSize,
209 static wxULongLong
GetTotalSize(const wxString
& dir
,
210 wxArrayString
* filesSkipped
= NULL
);
213 Returns @true if the directory contains any files matching the given
214 @e filespec. If @a filespec is empty, look for any files at all. In any
215 case, even hidden files are taken into account.
217 bool HasFiles(const wxString
& filespec
= wxEmptyString
);
220 Returns @true if the directory contains any subdirectories (if a non
221 empty @e filespec is given, only check for directories matching it).
222 The hidden subdirectories are taken into account as well.
224 bool HasSubDirs(const wxString
& dirspec
= wxEmptyString
);
227 Returns @true if the directory was successfully opened by a previous call to
230 bool IsOpened() const;
233 Open the directory for enumerating, returns @true on success
234 or @false if an error occurred.
236 bool Open(const wxString
& dir
);
239 Enumerate all files and directories under the given directory recursively
240 calling the element of the provided wxDirTraverser
241 object for each of them.
242 More precisely, the function will really recurse into subdirectories if
243 @a flags contains @c wxDIR_DIRS flag. It will ignore the files (but
244 still possibly recurse into subdirectories) if @c wxDIR_FILES flag is
246 For each found directory, @ref wxDirTraverser::ondir sink.OnDir is called
247 and @ref wxDirTraverser::onfile sink.OnFile is called for every file.
248 Depending on the return value, the enumeration may continue or stop.
249 The function returns the total number of files found or @c (size_t)-1 on
251 See also: GetAllFiles()
253 size_t Traverse(wxDirTraverser
& sink
,
254 const wxString
& filespec
= wxEmptyString
,
255 int flags
= wxDIR_DEFAULT
);