Listing 2: Header for class FileAttributes
#if !defined(FILEATTRIBUTES_H_) #define FILEATTRIBUTES_H_ #include <windows.h> #include <stdexcept> #if defined(__BORLANDC__) using namespace std; #endif class FileAttributes { DWORD attributes; public: // "Get" functions inline BOOL IsDirectory() const throw() { return ((attributes & FILE_ATTRIBUTE_DIRECTORY )!=0); } inline BOOL IsArchive() const throw() { return ((attributes & FILE_ATTRIBUTE_ARCHIVE )!=0); } // portions omitted ... inline BOOL IsTemporary() const throw() { return ((attributes & FILE_ATTRIBUTE_TEMPORARY )!=0); } // Sometimes it's more useful just to have the raw number and do // your own comparisons versus the various FILE_ATTRIBUTE_ // constants. inline DWORD Value() const throw() { return attributes; } // "Set" functions inline void IsDirectory (const BOOL SetBit) throw() { if(SetBit) attributes |= FILE_ATTRIBUTE_DIRECTORY; else attributes &= (~FILE_ATTRIBUTE_DIRECTORY );} inline void IsArchive (const BOOL SetBit) throw() { if(SetBit) attributes |= FILE_ATTRIBUTE_ARCHIVE; else attributes &= (~FILE_ATTRIBUTE_ARCHIVE );} // portions omitted ... inline void IsTemporary (const BOOL SetBit) throw() { if(SetBit) attributes |= FILE_ATTRIBUTE_TEMPORARY; else attributes &= (~FILE_ATTRIBUTE_TEMPORARY );} // Constructors. Can construct from a DWORD or another // FileAttribute object. inline FileAttributes(const DWORD NewAttributes=0) throw() : attributes(NewAttributes) {} inline FileAttributes(const FileAttributes& FA) throw() { attributes=FA.attributes; } //Assignment operator is defined for other FileAttribute objects //as well as for DWORDS inline FileAttributes& operator=(const FileAttributes& FA) throw() { if(&FA != this) attributes=FA.attributes; return *this; } inline FileAttributes& operator=(const DWORD dw) throw() { attributes=dw; return *this; } }; #endif // FILEATTRIBUTES_H_ /* End of File */