// FileDetails.h #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #ifndef FileDetailsh #define FileDetailsh #include "LocalPath.h" // Used when scanning lots of Files class CFileDetails { CString Name; CString ShortName; __int64 Size; DWORD Attributes; CTime Created; CTime Accessed; CTime Modified; public: CFileDetails() : Attributes(0) {} CFileDetails(const CString& Directory) : Name(Directory), Attributes(FILE_ATTRIBUTE_DIRECTORY) {} CFileDetails(const WIN32_FIND_DATA& FindFileData) {Set(FindFileData);} virtual ~CFileDetails() {} void Clear() {Name.Empty();} void Set(const WIN32_FIND_DATA& FindFileData) { Name =FindFileData.cFileName; ShortName =FindFileData.cAlternateFileName; Size =(((__int64)(FindFileData.nFileSizeHigh))<<32)|FindFileData.nFileSizeLow; Attributes=FindFileData.dwFileAttributes; Created =FindFileData.ftCreationTime; Accessed =FindFileData.ftLastAccessTime; Modified =FindFileData.ftLastWriteTime; } CString GetName() const {return Name;} CString GetShortName() const {return ShortName.IsEmpty() ? Name : ShortName;} CString GetExtension() const {return CLocalPath::GetExtension(Name);} __int64 GetSize() const {return Size;} DWORD GetAttributes() const {return Attributes;} CTime GetCreated() const {return Created;} CTime GetAccessed() const {return Accessed;} CTime GetModified() const {return Modified;} bool IsReadOnly () const {return (Attributes & FILE_ATTRIBUTE_READONLY )!=0;} bool IsHidden () const {return (Attributes & FILE_ATTRIBUTE_HIDDEN )!=0;} bool IsSystem () const {return (Attributes & FILE_ATTRIBUTE_SYSTEM )!=0;} bool IsDirectory () const {return (Attributes & FILE_ATTRIBUTE_DIRECTORY )!=0;} bool IsArchive () const {return (Attributes & FILE_ATTRIBUTE_ARCHIVE )!=0;} bool IsEncrypted () const {return (Attributes & FILE_ATTRIBUTE_ENCRYPTED )!=0;} bool IsNormal () const {return (Attributes & FILE_ATTRIBUTE_NORMAL )!=0;} bool IsTemporary () const {return (Attributes & FILE_ATTRIBUTE_TEMPORARY )!=0;} bool IsSparse () const {return (Attributes & FILE_ATTRIBUTE_SPARSE_FILE )!=0;} bool IsReparse () const {return (Attributes & FILE_ATTRIBUTE_REPARSE_POINT )!=0;} bool IsCompressed() const {return (Attributes & FILE_ATTRIBUTE_COMPRESSED )!=0;} bool IsOffLine () const {return (Attributes & FILE_ATTRIBUTE_OFFLINE )!=0;} bool IsIndexed () const {return (Attributes & FILE_ATTRIBUTE_NOT_CONTENT_INDEXED)==0;} int Compare(const CFileDetails& File) const { // For TreeList::Insert int i=File.IsDirectory()-IsDirectory(); // Directories first. return i ? i : Name.CompareNoCase(File.Name); } friend CArchive& __stdcall operator<<(CArchive& ar, const CFileDetails& File) { ar << File.Name << File.ShortName << File.Attributes << File.Created << File.Accessed << File.Modified << (DWORD)(File.Size>>32) << (DWORD)(File.Size); return ar; } friend CArchive& __stdcall operator>>(CArchive& ar, CFileDetails& File) { DWORD H,L; ar >> File.Name >> File.ShortName >> File.Attributes >> File.Created >> File.Accessed >> File.Modified >> H >> L; File.Size=(((__int64)H)<<32)|L; return ar; } }; #endif //ndef FileDetailsh