Windows API遍歷檔案目錄、搜尋檔案
阿新 • • 發佈:2019-02-15
涉及的標頭檔案有windows.h,stdio.h,
涉及的函式主要是FindFirstFile、FindNextFile函式
void list_current_dir()
{
WIN32_FIND_DATA FileData;
HANDLE hSearch = NULL;
BOOL finished = FALSE;
printf("%d\n", sizeof(FILETIME));
printf("%d\n", sizeof(WIN32_FIND_DATA));
hSearch = FindFirstFile("*", &FileData); // find for all files
if(hSearch == INVALID_HANDLE_VALUE)
return; // No file found
while(!finished)
{
//puts(FileData.cFileName); // print file name
printf("%s\n", FileData.cFileName);
finished = !FindNextFile(hSearch, &FileData); // find next file
}
FindClose(hSearch); // finish searching
}
//查詢檔案
HANDLE WINAPI FindFirstFile(
__in LPCTSTR lpFileName,//檔名或路徑
__out LPWIN32_FIND_DATA lpFindFileData
);
//查詢下一個檔案
BOOL WINAPI FindNextFile(
__in HANDLE hFindFile,
__out LPWIN32_FIND_DATA lpFindFileData
);
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes; //檔案屬性
FILETIME ftCreationTime; //建立時間
FILETIME ftLastAccessTime; //最近訪問時間
FILETIME ftLastWriteTime; //最近修改時間
DWORD nFileSizeHigh; //高位大小
DWORD nFileSizeLow; //低位大小
DWORD dwReserved0; //保留
DWORD dwReserved1; //保留
TCHAR cFileName[MAX_PATH];//檔名,非全路徑
TCHAR cAlternateFileName[14];
}WIN32_FIND_DATA,*PWIN32_FIND_DATA,*LPWIN32_FIND_DATA;
void FindFiles(CString &strPath)
{
WIN32_FIND_DATA findData;
CString strTemp = strPath;
strTemp.Format(_T("%s\\*.*"), strPath);//查詢指定目錄下的直接的所有檔案和目錄
HANDLE hFile = FindFirstFile(strTemp, &findData);
while (hFile != INVALID_HANDLE_VALUE)
{
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//如果是目錄
{
if(findData.cFileName[0] != _T('.'))//排除.和..資料夾
{
strTemp = strPath+ CString("\\") + findData.cFileName;//獲得完整路徑
FindFiles(strTemp);//遞迴查詢當前目錄的檔案
}
}
else
{
strTemp = strPath+ CString("\\") + findData.cFileName;
}
if(!FindNextFile(hFile, &findData))
{
break;
}
}
}