1baa3858d3f5d128a5c8466b700098109edcad5f2repo sync// Windows/FileFind.h 2baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 3baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifndef __WINDOWS_FILEFIND_H 4baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define __WINDOWS_FILEFIND_H 5baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 6baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "../Common/MyString.h" 7baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "../Common/Types.h" 8baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "Defs.h" 9baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "FileName.h" 10baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 11baa3858d3f5d128a5c8466b700098109edcad5f2repo syncnamespace NWindows { 12baa3858d3f5d128a5c8466b700098109edcad5f2repo syncnamespace NFile { 13baa3858d3f5d128a5c8466b700098109edcad5f2repo syncnamespace NFind { 14baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 15baa3858d3f5d128a5c8466b700098109edcad5f2repo syncnamespace NAttributes 16baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 17baa3858d3f5d128a5c8466b700098109edcad5f2repo sync inline bool IsReadOnly(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_READONLY) != 0; } 18baa3858d3f5d128a5c8466b700098109edcad5f2repo sync inline bool IsHidden(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_HIDDEN) != 0; } 19baa3858d3f5d128a5c8466b700098109edcad5f2repo sync inline bool IsSystem(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_SYSTEM) != 0; } 20baa3858d3f5d128a5c8466b700098109edcad5f2repo sync inline bool IsDir(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_DIRECTORY) != 0; } 21baa3858d3f5d128a5c8466b700098109edcad5f2repo sync inline bool IsArchived(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_ARCHIVE) != 0; } 22baa3858d3f5d128a5c8466b700098109edcad5f2repo sync inline bool IsCompressed(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_COMPRESSED) != 0; } 23baa3858d3f5d128a5c8466b700098109edcad5f2repo sync inline bool IsEncrypted(DWORD attrib) { return (attrib & FILE_ATTRIBUTE_ENCRYPTED) != 0; } 24baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 25baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 26baa3858d3f5d128a5c8466b700098109edcad5f2repo syncclass CFileInfoBase 27baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 28baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool MatchesMask(UINT32 mask) const { return ((Attrib & mask) != 0); } 29baa3858d3f5d128a5c8466b700098109edcad5f2repo syncprotected: 30baa3858d3f5d128a5c8466b700098109edcad5f2repo sync void Clear(); 31baa3858d3f5d128a5c8466b700098109edcad5f2repo syncpublic: 32baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt64 Size; 33baa3858d3f5d128a5c8466b700098109edcad5f2repo sync FILETIME CTime; 34baa3858d3f5d128a5c8466b700098109edcad5f2repo sync FILETIME ATime; 35baa3858d3f5d128a5c8466b700098109edcad5f2repo sync FILETIME MTime; 36baa3858d3f5d128a5c8466b700098109edcad5f2repo sync DWORD Attrib; 37baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsDevice; 38baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 39baa3858d3f5d128a5c8466b700098109edcad5f2repo sync /* 40baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #ifdef UNDER_CE 41baa3858d3f5d128a5c8466b700098109edcad5f2repo sync DWORD ObjectID; 42baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #else 43baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UINT32 ReparseTag; 44baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #endif 45baa3858d3f5d128a5c8466b700098109edcad5f2repo sync */ 46baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 47baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsArchived() const { return MatchesMask(FILE_ATTRIBUTE_ARCHIVE); } 48baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsCompressed() const { return MatchesMask(FILE_ATTRIBUTE_COMPRESSED); } 49baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsDir() const { return MatchesMask(FILE_ATTRIBUTE_DIRECTORY); } 50baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsEncrypted() const { return MatchesMask(FILE_ATTRIBUTE_ENCRYPTED); } 51baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsHidden() const { return MatchesMask(FILE_ATTRIBUTE_HIDDEN); } 52baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsNormal() const { return MatchesMask(FILE_ATTRIBUTE_NORMAL); } 53baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsOffline() const { return MatchesMask(FILE_ATTRIBUTE_OFFLINE); } 54baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsReadOnly() const { return MatchesMask(FILE_ATTRIBUTE_READONLY); } 55baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool HasReparsePoint() const { return MatchesMask(FILE_ATTRIBUTE_REPARSE_POINT); } 56baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsSparse() const { return MatchesMask(FILE_ATTRIBUTE_SPARSE_FILE); } 57baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsSystem() const { return MatchesMask(FILE_ATTRIBUTE_SYSTEM); } 58baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsTemporary() const { return MatchesMask(FILE_ATTRIBUTE_TEMPORARY); } 59baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 60baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 61baa3858d3f5d128a5c8466b700098109edcad5f2repo syncstruct CFileInfo: public CFileInfoBase 62baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 63baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CSysString Name; 64baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 65baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsDots() const; 66baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Find(LPCTSTR wildcard); 67baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 68baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 69baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifdef _UNICODE 70baa3858d3f5d128a5c8466b700098109edcad5f2repo synctypedef CFileInfo CFileInfoW; 71baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#else 72baa3858d3f5d128a5c8466b700098109edcad5f2repo syncstruct CFileInfoW: public CFileInfoBase 73baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 74baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UString Name; 75baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 76baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsDots() const; 77baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Find(LPCWSTR wildcard); 78baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 79baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 80baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 81baa3858d3f5d128a5c8466b700098109edcad5f2repo syncclass CFindFile 82baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 83baa3858d3f5d128a5c8466b700098109edcad5f2repo sync friend class CEnumerator; 84baa3858d3f5d128a5c8466b700098109edcad5f2repo sync HANDLE _handle; 85baa3858d3f5d128a5c8466b700098109edcad5f2repo syncpublic: 86baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsHandleAllocated() const { return _handle != INVALID_HANDLE_VALUE; } 87baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CFindFile(): _handle(INVALID_HANDLE_VALUE) {} 88baa3858d3f5d128a5c8466b700098109edcad5f2repo sync ~CFindFile() { Close(); } 89baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool FindFirst(LPCTSTR wildcard, CFileInfo &fileInfo); 90baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool FindNext(CFileInfo &fileInfo); 91baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #ifndef _UNICODE 92baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool FindFirst(LPCWSTR wildcard, CFileInfoW &fileInfo); 93baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool FindNext(CFileInfoW &fileInfo); 94baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #endif 95baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Close(); 96baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 97baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 98baa3858d3f5d128a5c8466b700098109edcad5f2repo syncbool DoesFileExist(LPCTSTR name); 99baa3858d3f5d128a5c8466b700098109edcad5f2repo syncbool DoesDirExist(LPCTSTR name); 100baa3858d3f5d128a5c8466b700098109edcad5f2repo syncbool DoesFileOrDirExist(LPCTSTR name); 101baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifndef _UNICODE 102baa3858d3f5d128a5c8466b700098109edcad5f2repo syncbool DoesFileExist(LPCWSTR name); 103baa3858d3f5d128a5c8466b700098109edcad5f2repo syncbool DoesDirExist(LPCWSTR name); 104baa3858d3f5d128a5c8466b700098109edcad5f2repo syncbool DoesFileOrDirExist(LPCWSTR name); 105baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 106baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 107baa3858d3f5d128a5c8466b700098109edcad5f2repo syncclass CEnumerator 108baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 109baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CFindFile _findFile; 110baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CSysString _wildcard; 111baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool NextAny(CFileInfo &fileInfo); 112baa3858d3f5d128a5c8466b700098109edcad5f2repo syncpublic: 113baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CEnumerator(): _wildcard(NName::kAnyStringWildcard) {} 114baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CEnumerator(const CSysString &wildcard): _wildcard(wildcard) {} 115baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Next(CFileInfo &fileInfo); 116baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Next(CFileInfo &fileInfo, bool &found); 117baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 118baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 119baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifdef _UNICODE 120baa3858d3f5d128a5c8466b700098109edcad5f2repo synctypedef CEnumerator CEnumeratorW; 121baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#else 122baa3858d3f5d128a5c8466b700098109edcad5f2repo syncclass CEnumeratorW 123baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 124baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CFindFile _findFile; 125baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UString _wildcard; 126baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool NextAny(CFileInfoW &fileInfo); 127baa3858d3f5d128a5c8466b700098109edcad5f2repo syncpublic: 128baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CEnumeratorW(): _wildcard(NName::kAnyStringWildcard) {} 129baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CEnumeratorW(const UString &wildcard): _wildcard(wildcard) {} 130baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Next(CFileInfoW &fileInfo); 131baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Next(CFileInfoW &fileInfo, bool &found); 132baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 133baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 134baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 135baa3858d3f5d128a5c8466b700098109edcad5f2repo syncclass CFindChangeNotification 136baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 137baa3858d3f5d128a5c8466b700098109edcad5f2repo sync HANDLE _handle; 138baa3858d3f5d128a5c8466b700098109edcad5f2repo syncpublic: 139baa3858d3f5d128a5c8466b700098109edcad5f2repo sync operator HANDLE () { return _handle; } 140baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsHandleAllocated() const { return _handle != INVALID_HANDLE_VALUE && _handle != 0; } 141baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CFindChangeNotification(): _handle(INVALID_HANDLE_VALUE) {} 142baa3858d3f5d128a5c8466b700098109edcad5f2repo sync ~CFindChangeNotification() { Close(); } 143baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Close(); 144baa3858d3f5d128a5c8466b700098109edcad5f2repo sync HANDLE FindFirst(LPCTSTR pathName, bool watchSubtree, DWORD notifyFilter); 145baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #ifndef _UNICODE 146baa3858d3f5d128a5c8466b700098109edcad5f2repo sync HANDLE FindFirst(LPCWSTR pathName, bool watchSubtree, DWORD notifyFilter); 147baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #endif 148baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool FindNext() { return BOOLToBool(::FindNextChangeNotification(_handle)); } 149baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 150baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 151baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifndef UNDER_CE 152baa3858d3f5d128a5c8466b700098109edcad5f2repo syncbool MyGetLogicalDriveStrings(CSysStringVector &driveStrings); 153baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifndef _UNICODE 154baa3858d3f5d128a5c8466b700098109edcad5f2repo syncbool MyGetLogicalDriveStrings(UStringVector &driveStrings); 155baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 156baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 157baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 158baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}}} 159baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 160baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 161baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 162