237 lines
5.1 KiB
C++
237 lines
5.1 KiB
C++
#pragma once
|
|
struct _FileListEntry
|
|
{
|
|
char Filename[512];
|
|
char FilenameOnly[128];
|
|
FILETIME ftCreationTime;
|
|
FILETIME ftLastWriteTime;
|
|
FILETIME ftLastAccessTime;
|
|
unsigned int FileSize;
|
|
};
|
|
|
|
class CFileList
|
|
{
|
|
public:
|
|
CFileList()
|
|
{
|
|
nFiles=0;
|
|
}
|
|
~CFileList()
|
|
{
|
|
List.Cleanup();
|
|
}
|
|
|
|
void AddFile(LPWIN32_FIND_DATA pFile, char *Path)
|
|
{
|
|
_FileListEntry *pNew = new _FileListEntry;
|
|
sprintf(pNew->Filename,"%s%s",Path,pFile->cFileName);
|
|
strcpy(pNew->FilenameOnly,pFile->cFileName);
|
|
pNew->ftCreationTime=pFile->ftCreationTime;
|
|
pNew->ftLastAccessTime=pFile->ftLastAccessTime;
|
|
pNew->ftLastWriteTime=pFile->ftLastWriteTime;
|
|
pNew->FileSize=pFile->nFileSizeLow;
|
|
List+=pNew;
|
|
nFiles++;
|
|
}
|
|
char *GetPath(char *Wildcard)
|
|
{
|
|
static char Path[512];
|
|
if (char *pSlash=strrchr(Wildcard,'\\'))
|
|
{
|
|
strcpy(Path,Wildcard);
|
|
Path[(pSlash-Wildcard)+1]=0;
|
|
}
|
|
else
|
|
Path[0]=0;
|
|
return Path;
|
|
}
|
|
unsigned int EnumDirectories(char *Wildcard)
|
|
{
|
|
WIN32_FIND_DATA file;
|
|
HANDLE hSearch=FindFirstFile(Wildcard,&file);
|
|
if (hSearch==INVALID_HANDLE_VALUE)
|
|
return 0;
|
|
char *Path=GetPath(Wildcard);
|
|
do
|
|
{
|
|
if (_stricmp(file.cFileName,".") && _stricmp(file.cFileName,".."))
|
|
if (file.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
|
|
AddFile(&file,Path);
|
|
} while (FindNextFile(hSearch,&file));
|
|
|
|
FindClose(hSearch);
|
|
return nFiles;
|
|
}
|
|
unsigned int EnumFiles(char *Wildcard)
|
|
{
|
|
WIN32_FIND_DATA file;
|
|
HANDLE hSearch=FindFirstFile(Wildcard,&file);
|
|
if (hSearch==INVALID_HANDLE_VALUE)
|
|
return 0;
|
|
char *Path=GetPath(Wildcard);
|
|
do
|
|
{
|
|
if (!(file.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
|
|
AddFile(&file,Path);
|
|
} while (FindNextFile(hSearch,&file));
|
|
|
|
FindClose(hSearch);
|
|
return nFiles;
|
|
}
|
|
unsigned int EnumFilesAfter(FILETIME &filetime, char *Wildcard)
|
|
{
|
|
WIN32_FIND_DATA file;
|
|
HANDLE hSearch=FindFirstFile(Wildcard,&file);
|
|
if (hSearch==INVALID_HANDLE_VALUE)
|
|
return 0;
|
|
char *Path=GetPath(Wildcard);
|
|
do
|
|
{
|
|
if (!(file.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) &&
|
|
CompareFileTime(&file.ftLastWriteTime,&filetime)>0)
|
|
{
|
|
AddFile(&file,Path);
|
|
}
|
|
} while (FindNextFile(hSearch,&file));
|
|
|
|
FindClose(hSearch);
|
|
return nFiles;
|
|
}
|
|
|
|
unsigned int nFiles;
|
|
CIndex <_FileListEntry *> List;
|
|
};
|
|
|
|
struct _FileListEntryW
|
|
{
|
|
wchar_t Filename[512];
|
|
wchar_t FilenameOnly[128];
|
|
FILETIME ftCreationTime;
|
|
FILETIME ftLastWriteTime;
|
|
FILETIME ftLastAccessTime;
|
|
unsigned int FileSize;
|
|
};
|
|
|
|
class CFileListW
|
|
{
|
|
public:
|
|
CFileListW()
|
|
{
|
|
nFiles=0;
|
|
}
|
|
~CFileListW()
|
|
{
|
|
List.Cleanup();
|
|
}
|
|
|
|
void Clear()
|
|
{
|
|
List.Cleanup();
|
|
nFiles=0;
|
|
}
|
|
|
|
void AddFile(PWIN32_FIND_DATAW pFile, wchar_t *Path)
|
|
{
|
|
_FileListEntryW *pNew = new _FileListEntryW;
|
|
_snwprintf(pNew->Filename,512,L"%ls%ls",Path,pFile->cFileName);
|
|
wcsncpy(pNew->FilenameOnly,pFile->cFileName,sizeof(pNew->FilenameOnly)/sizeof(pNew->FilenameOnly[0]));
|
|
pNew->ftCreationTime=pFile->ftCreationTime;
|
|
pNew->ftLastAccessTime=pFile->ftLastAccessTime;
|
|
pNew->ftLastWriteTime=pFile->ftLastWriteTime;
|
|
pNew->FileSize=pFile->nFileSizeLow;
|
|
List+=pNew;
|
|
nFiles++;
|
|
}
|
|
inline wchar_t *ConvertSlashes(wchar_t *text)
|
|
{
|
|
wchar_t *temp=text;
|
|
while(wchar_t *pSlash=wcschr(temp,'\\'))
|
|
{
|
|
*pSlash='/';
|
|
temp=&pSlash[1];
|
|
}
|
|
return text;
|
|
}
|
|
wchar_t *GetPath(const wchar_t *Wildcard)
|
|
{
|
|
static wchar_t Path[512];
|
|
wchar_t temp[512];
|
|
wcsncpy(temp,Wildcard,512);
|
|
temp[511]=0;
|
|
|
|
wchar_t *pLastSlash=wcsrchr(temp,'\\');
|
|
if (pLastSlash)
|
|
{
|
|
wchar_t *pOtherSlash=wcsrchr(pLastSlash,'/');
|
|
if (pOtherSlash && pOtherSlash>pLastSlash)
|
|
pLastSlash=pOtherSlash;
|
|
}
|
|
else
|
|
pLastSlash=wcsrchr(temp,'/');
|
|
if (wchar_t *pSlash=pLastSlash)
|
|
{
|
|
wcsncpy(Path,temp,sizeof(Path)/sizeof(Path[0]));
|
|
Path[(pSlash-temp)+1]=0;
|
|
ConvertSlashes(Path);
|
|
}
|
|
else
|
|
Path[0]=0;
|
|
return Path;
|
|
}
|
|
unsigned int EnumDirectories(const wchar_t *Wildcard)
|
|
{
|
|
WIN32_FIND_DATAW file;
|
|
HANDLE hSearch=FindFirstFileW(Wildcard,&file);
|
|
if (hSearch==INVALID_HANDLE_VALUE)
|
|
return 0;
|
|
wchar_t *Path=GetPath(Wildcard);
|
|
do
|
|
{
|
|
if (wcsicmp(file.cFileName,L".") && wcsicmp(file.cFileName,L".."))
|
|
if (file.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
|
|
AddFile(&file,Path);
|
|
} while (FindNextFileW(hSearch,&file));
|
|
|
|
FindClose(hSearch);
|
|
return nFiles;
|
|
}
|
|
unsigned int EnumFiles(const wchar_t *Wildcard)
|
|
{
|
|
WIN32_FIND_DATAW file;
|
|
HANDLE hSearch=FindFirstFileW(Wildcard,&file);
|
|
if (hSearch==INVALID_HANDLE_VALUE)
|
|
return 0;
|
|
wchar_t *Path=GetPath(Wildcard);
|
|
do
|
|
{
|
|
if (!(file.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
|
|
AddFile(&file,Path);
|
|
} while (FindNextFileW(hSearch,&file));
|
|
|
|
FindClose(hSearch);
|
|
return nFiles;
|
|
}
|
|
unsigned int EnumFilesAfter(FILETIME &filetime, const wchar_t *Wildcard)
|
|
{
|
|
WIN32_FIND_DATAW file;
|
|
HANDLE hSearch=FindFirstFileW(Wildcard,&file);
|
|
if (hSearch==INVALID_HANDLE_VALUE)
|
|
return 0;
|
|
wchar_t *Path=GetPath(Wildcard);
|
|
do
|
|
{
|
|
if (!(file.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) &&
|
|
CompareFileTime(&file.ftLastWriteTime,&filetime)>0)
|
|
{
|
|
AddFile(&file,Path);
|
|
}
|
|
} while (FindNextFileW(hSearch,&file));
|
|
|
|
FindClose(hSearch);
|
|
return nFiles;
|
|
}
|
|
|
|
unsigned int nFiles;
|
|
CIndex <_FileListEntryW *> List;
|
|
};
|