// Windows/FileFind.h #ifndef __WINDOWS_FILEFIND_H #define __WINDOWS_FILEFIND_H #include "../Common/MyString.h" #include "FileName.h" #include "Defs.h" #include /* for DIR */ #include namespace NWindows { namespace NFile { namespace NFind { namespace NAttributes { inline bool IsReadOnly(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_READONLY) != 0; } inline bool IsHidden(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_HIDDEN) != 0; } inline bool IsSystem(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_SYSTEM) != 0; } inline bool IsDir(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_DIRECTORY) != 0; } inline bool IsArchived(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_ARCHIVE) != 0; } inline bool IsCompressed(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_COMPRESSED) != 0; } inline bool IsEncrypted(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_ENCRYPTED) != 0; } } class CFileInfoBase { bool MatchesMask(UINT32 mask) const { return ((Attrib & mask) != 0); } public: UInt64 Size; FILETIME CTime; FILETIME ATime; FILETIME MTime; DWORD Attrib; bool IsDevice; bool IsDir() const { return MatchesMask(FILE_ATTRIBUTE_DIRECTORY); } }; class CFileInfo: public CFileInfoBase { public: AString Name; // FIXME CSysString Name; bool IsDots() const; bool Find(LPCSTR wildcard); }; // FIXME #ifdef _UNICODE // typedef CFileInfo CFileInfoW; // #else class CFileInfoW: public CFileInfoBase { public: UString Name; bool IsDots() const; bool Find(LPCWSTR wildcard); }; // #endif class CFindFile { friend class CEnumerator; DIR *_dirp; AString _pattern; AString _directory; public: bool IsHandleAllocated() const { return (_dirp != 0); } CFindFile(): _dirp(0) {} ~CFindFile() { Close(); } // bool FindFirst(LPCTSTR wildcard, CFileInfo &fileInfo); bool FindFirst(LPCSTR wildcard, CFileInfo &fileInfo); bool FindNext(CFileInfo &fileInfo); // FIXME #ifndef _UNICODE bool FindFirst(LPCWSTR wildcard, CFileInfoW &fileInfo); bool FindNext(CFileInfoW &fileInfo); // FIXME #endif bool Close(); }; bool FindFile(LPCSTR wildcard, CFileInfo &fileInfo); bool DoesFileExist(LPCSTR name); bool DoesDirExist(LPCTSTR name); bool DoesFileOrDirExist(LPCSTR name); // #ifndef _UNICODE bool FindFile(LPCWSTR wildcard, CFileInfoW &fileInfo); bool DoesFileExist(LPCWSTR name); bool DoesDirExist(LPCWSTR name); bool DoesFileOrDirExist(LPCWSTR name); // #endif class CEnumerator { CFindFile _findFile; AString _wildcard; // FIXME CSysString _wildcard; bool NextAny(CFileInfo &fileInfo); public: CEnumerator(): _wildcard(NName::kAnyStringWildcard) {} // FIXME CEnumerator(const CSysString &wildcard): _wildcard(wildcard) {} CEnumerator(const AString &wildcard): _wildcard(wildcard) {} bool Next(CFileInfo &fileInfo); bool Next(CFileInfo &fileInfo, bool &found); }; // FIXME #ifdef _UNICODE // typedef CEnumerator CEnumeratorW; // #else class CEnumeratorW { CFindFile _findFile; UString _wildcard; bool NextAny(CFileInfoW &fileInfo); public: CEnumeratorW(): _wildcard(NName::kAnyStringWildcard) {} CEnumeratorW(const UString &wildcard): _wildcard(wildcard) {} bool Next(CFileInfoW &fileInfo); bool Next(CFileInfoW &fileInfo, bool &found); }; // FIXME #endif }}} #endif