6 #ifndef _INC_cFileDir_H
7 #define _INC_cFileDir_H
29 FOF_ALLOWUNDO = 0x0040,
30 FOF_FILESONLY = 0x0080,
31 FOF_RENAMEONCOLLISION = 0x0100,
32 FOF_NOERRORUI = 0x400,
47 #define FILEDEVICE_PREFIX "\\\\.\\"
48 #elif defined(__linux__)
49 #define FILEDEVICE_PREFIX "/dev/"
77 bool isCaseSensitive()
const;
102 : m_sFileName(pszFileName)
108 , m_sFileName(pszFileName)
116 return SUPER_t::IsFileEqualTo(rEntry);
121 if (pEntry ==
nullptr)
123 return IsFileEqualTo(*pEntry);
127 return IsFileEqualTo(rEntry);
131 return !IsFileEqualTo(rEntry);
135 if (m_sFileName[0] !=
'.')
137 if (m_sFileName[1] ==
'\0')
144 if (m_sFileName[0] !=
'.')
146 if (m_sFileName[1] ==
'\0')
148 if (m_sFileName[1] !=
'.')
150 if (m_sFileName[2] ==
'\0')
174 WIN32_FIND_DATAW m_FindInfo;
176 #elif defined(__linux__)
210 return m_FileEntry.
isDots();
215 HRESULT FindFileNext(
bool bFirst =
false);
217 bool isContextOpen()
const;
228 static const int k_FilesMax = 64 * 1024;
242 m_aFiles.
Add(FileEntry);
249 : m_sDirPath(sDirPath)
266 return DirFileOp(
FILEOP_MOVE, pszDirSrc, pszDirDest, 0, pLog, pProgress);
271 return DirFileOp(
FILEOP_COPY, pszDirSrc, pszDirDest, 0, pLog, pProgress);
279 return DirFileOp(
FILEOP_DELETE, pszDirName, pszWildcardFile, nFileFlags,
nullptr,
nullptr);
290 m_sDirPath = sDirPath;
316 return GetFilePath(GetEnumTitleX(i));
#define _FN(x)
like _T(x) macro for static text file names.
Definition: FileName.h:23
#define GRAYCORE_LINK
Definition: GrayCore.h:47
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
FOF_TYPE_
Definition: cFileDir.h:24
@ FOF_X_UTF8
store file names as UTF8. even if USE_UNICODE.
Definition: cFileDir.h:38
@ FOF_X_WantDots
Definition: cFileDir.h:36
@ FOF_X_FollowLinks
Definition: cFileDir.h:35
#define UNITTEST2_PREDEF(x)
Definition: cUnitTestDecl.h:19
#define UNITTEST_FRIEND(n)
Define this in the class body to be unit tested. Allow the unit test to access private/protected stuf...
Definition: cUnitTestDecl.h:17
void RemoveAll()
Clean up.
Definition: cArray.h:230
TYPE & ElementAt(ITERATE_t nIndex)
Definition: cArray.h:167
ITERATE_t Add(ARG_TYPE newElement)
Definition: cArray.h:199
ITERATE_t GetSize() const noexcept
Definition: cArray.h:137
COMPARE_t CompareNoCase(const _TYPE_CH *pszStr) const
Definition: cString.h:269
REF_t ConstElementAt(ITERATE_t nIndex) const
Definition: cArray.h:534
bool IsValidIndex(ITERATE_t i) const noexcept
Definition: cArray.h:495
Definition: cFileDir.h:53
cStringF m_sVolumeName
can be empty.
Definition: cFileDir.h:60
FILESYS_TYPE get_FileSysType() const
Definition: cFileDir.h:73
FILESYS_TYPE m_eType
Enumerate known types for m_sTypeName (file system type)
Definition: cFileDir.h:62
bool m_bCaseSensitive
e.g. 0x03e700ff, FILE_CASE_SENSITIVE_SEARCH. else IgnoreCase
Definition: cFileDir.h:65
DWORD m_dwMaximumComponentLength
block size? e.g. 255 bytes
Definition: cFileDir.h:64
UINT64 m_nSerialNumber
Volume serial number (time stamp of last format) e.g. 0x0ca0e613 for _WIN32.
Definition: cFileDir.h:63
cStringF m_sTypeName
File system format/type e.g. "NTFS", "FAT".
Definition: cFileDir.h:61
Definition: cFileDir.h:222
cFileDir(cStringF sDirPath="")
Definition: cFileDir.h:248
ITERATE_t get_FileCount() const
Definition: cFileDir.h:294
cStringF GetFilePath(const FILECHAR_t *pszTitle) const
Definition: cFileDir.h:319
cStringF GetEnumPath(ITERATE_t i) const
Definition: cFileDir.h:313
void RemoveAll()
Definition: cFileDir.h:324
cStringF m_sDirPath
Does NOT include the wild card.
Definition: cFileDir.h:234
void put_DirPath(cStringF sDirPath)
Definition: cFileDir.h:288
virtual ~cFileDir()
Definition: cFileDir.h:252
static HRESULT __stdcall CopyDirFiles(const FILECHAR_t *pszDirSrc, const FILECHAR_t *pszDirDest, cLogProcessor *pLog=nullptr, IStreamProgressCallback *pProgress=nullptr)
Definition: cFileDir.h:268
cFileFindEntry & GetEnumFile(ITERATE_t i)
Definition: cFileDir.h:302
virtual HRESULT AddFileDirEntry(cFileFindEntry &FileEntry)
Definition: cFileDir.h:237
cStringF GetEnumTitleX(ITERATE_t i) const
Definition: cFileDir.h:306
cArrayStruct< cFileFindEntry > m_aFiles
Array of the files we found matching the ReadDir criteria.
Definition: cFileDir.h:231
static HRESULT __stdcall MoveDirFiles(const FILECHAR_t *pszDirSrc, const FILECHAR_t *pszDirDest, cLogProcessor *pLog=nullptr, IStreamProgressCallback *pProgress=nullptr)
Definition: cFileDir.h:263
const cFileFindEntry & GetEnumFile(ITERATE_t i) const
Definition: cFileDir.h:298
cStringF get_DirPath() const
Definition: cFileDir.h:284
static HRESULT __stdcall DeleteDirFiles(const FILECHAR_t *pszDirName, const FILECHAR_t *pszWildcardFile=nullptr, DWORD nFileFlags=0)
Definition: cFileDir.h:273
Definition: cFileDir.h:86
bool IsFileEqualTo(const THIS_t *pEntry) const
Definition: cFileDir.h:118
bool isDots() const noexcept
Definition: cFileDir.h:141
cFileFindEntry(const FILECHAR_t *pszFileName, const cFileStatus &status)
Definition: cFileDir.h:106
cStringF get_Name() const
Definition: cFileDir.h:154
cFileFindEntry()
Definition: cFileDir.h:97
cFileFindEntry(const FILECHAR_t *pszFileName)
Definition: cFileDir.h:101
bool isDot() const
Definition: cFileDir.h:133
bool IsFileEqualTo(const THIS_t &rEntry) const
Definition: cFileDir.h:111
cStringF m_sFileName
relative file title. (NOT FULL PATH) checks USE_UNICODE_FN and FILECHAR_t.
Definition: cFileDir.h:94
Definition: cFileDir.h:161
cStringF GetFilePath(const FILECHAR_t *pszFileTitle) const
Definition: cFileDir.h:197
cStringF get_DirPath() const noexcept
Definition: cFileDir.h:193
bool isDots() const noexcept
Definition: cFileDir.h:208
cStringF get_FilePath() const
Definition: cFileDir.h:202
cFileFindEntry m_FileEntry
The current entry. by calls to FindFile() and FindFileNext()
Definition: cFileDir.h:168
static cStringF __stdcall CombineFilePathX(const FILECHAR_t *pszBase, const FILECHAR_t *pszName, FILECHAR_t chSep=k_DirSep)
Definition: cFilePath.cpp:596
Definition: cFileStatus.h:58
Definition: cLogAppender.h:168
< The main namespace for all Core functions.
Definition: GrayCore.cpp:14
int ITERATE_t
like size_t but signed
Definition: Index.h:28
char FILECHAR_t
a UTF8 char in a file name. like TCHAR
Definition: FileName.h:22
char LOGCHAR_t
always just use UTF8 for logs, don't bother with UNICODE.
Definition: cLogLevel.h:17
FILEOP_TYPE
Definition: FileName.h:29
@ FILEOP_DELETE
Definition: FileName.h:35
@ FILEOP_COPY
Definition: FileName.h:34
@ FILEOP_MOVE
Definition: FileName.h:33
UINT64 FILE_SIZE_t
similar to STREAM_POS_t size_t
Definition: cFileStatus.h:31
bool operator!=(const cTimeDouble &dt1, const cTimeDouble &dt2)
Definition: cTimeDouble.h:254
bool operator==(const cTimeDouble &dt1, const cTimeDouble &dt2)
Definition: cTimeDouble.h:250
FILESYS_TYPE
Definition: cFilePath.h:22
@ FILESYS_QTY
Definition: cFilePath.h:32
Definition: cStreamProgress.h:168