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 */