Listing 1: Header for class DirWalk
class DirWalk {
private:
// Member variables that affect the object as a whole
BOOL mRecurse; // Recurse subdirectories?
BOOL mListSubDirs; // Process subdir names?
char mSearchSpec[_MAX_PATH]; // Files must match this
char mStartingDirectory[_MAX_PATH]; // Where walk begins
#if defined(_MT)
char mCurrentDirectory[_MAX_PATH];
char mCurrentDirectorySearch[_MAX_PATH];
char mFullPathName[_MAX_PATH];
#endif
// Member variables that deal only with the current file
BOOL mFoundAnother; // Found another in the current directory?
BOOL mIsDir; // Is this one a directory
DWORD mSize; // Current file size
DWORD mSizeHigh; // High double word of file size
int mDepth; // Current file's recursion level
WIN32_FIND_DATA mFindData; // Much info on current file
enum { ShortFileNameLength=13 };
char mShortFileName[ShortFileNameLength]; // Holds the 8.3 name
// Performs some initializations common to all the constructors
void ConstructorHelper(const BOOL RecurseSubDirs,
const BOOL ListSubDirs) throw();
void Recurse() throw(runtime_error); //Performs the actual work
BOOL IsChildDir() const throw();
HANDLE FindFirstChildDir() throw();
BOOL FindNextChildDir(HANDLE hFindFile) throw();
protected:
// Recursion level of the current file
inline int Depth() const throw() { return mDepth; }
// Size of current file. Use SizeHigh() if over 4.2GB.
inline DWORD Size() const throw() { return mSize; }
inline DWORD SizeHigh() const throw() { return mSizeHigh; }
FileAttributes mFA;
FileTime mCreationTime;
FileTime mLastAccessTime;
FileTime mLastWriteTime;
inline const char* const Filename() const throw() {
return mFindData.cFileName; }
const char* const ShortFilename() throw();
#if defined(_MT)
const char* const FullPathName() throw();
#endif
// FoundFile() is called whenever another file or directory is
// found that meets the criteria in effect for the object. This
// must be overridden in derived classes.
virtual void FoundFile()=0;
public:
#if defined(_MSC_VER)
DirWalk(const BOOL RecurseSubDirs=TRUE,
const BOOL ListSubDirs=TRUE);
DirWalk(const char* StartingDirectory,
const BOOL RecurseSubDirs=TRUE,
const BOOL ListSubDirs=TRUE);
DirWalk(const char* StartingDirectory,
const char* SearchSpec, const BOOL RecurseSubDirs=TRUE,
const BOOL ListSubDirs=TRUE);
#else
DirWalk(const BOOL RecurseSubDirs=TRUE,
const BOOL ListSubDirs=TRUE) throw();
DirWalk(const char* StartingDirectory,
const BOOL RecurseSubDirs=TRUE,
const BOOL ListSubDirs=TRUE) throw();
DirWalk(const char* StartingDirectory,const char* SearchSpec,
const BOOL RecurseSubDirs=TRUE,
const BOOL ListSubDirs=TRUE) throw();
#endif
void Walk() throw(runtime_error); // Begin the journey.
};
/* End of File */