VC C++ 遍歷指定目錄 Windows API


HANDLE FindFirstFile( LPCTSTR lpFileName,  
 LPWIN32_FIND_DATA lpFindFileData   
);
BOOL FindNextFile( HANDLE hFindFile,  
 LPWIN32_FIND_DATA lpFindFileData  
);
複製代碼
#include <windows.h>
#include <stdio.h>

/* ************************************
* DWORD EnumerateFileInDrectory(LPSTR szPath)
* 功能 遍歷目錄下的文件和子目錄,將顯示文件的
* 文件和文件夾隱藏、加密的屬性
* 參數 LPTSTR szPath,爲需遍歷的路徑
* 返回值 0代表執行完成,1代碼發生錯誤
*************************************
*/
DWORD EnumerateFileInDrectory(LPSTR szPath)
{
WIN32_FIND_DATA FindFileData;
HANDLE hListFile;
CHAR szFilePath[MAX_PATH];

//構造代表子目錄和文件夾路徑的字符串,使用通配符“*”
strcpy(szFilePath, szPath);
//註釋的代碼可以用於查找所有以“.txt結尾”的文件。
//lstrcat(szFilePath, "\\*.txt");
strcat(szFilePath, "\\*");
//查找第一個文件/目錄,獲得查找句柄
hListFile = FindFirstFile(szFilePath,&FindFileData);
//判斷句柄
if(hListFile==INVALID_HANDLE_VALUE)
{
printf("錯誤:%d",GetLastError());
return 1;
}
else
{
do
{
/* 如果不想顯示代表本級目錄和上級目錄的“.”和“..”,
可以使用註釋部分的代碼過濾。
if(lstrcmp(FindFileData.cFileName,TEXT("."))==0||
lstrcmp(FindFileData.cFileName,TEXT(".."))==0)
{
continue;
}
*/
//打印文件名、目錄名
printf("%s\t\t",FindFileData.cFileName);
//判斷文件屬性,加密文件或文件夾
if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_ENCRYPTED)
{
printf("<加密> ");
}
//判斷文件屬性,隱藏文件或文件夾
if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_HIDDEN)
{
printf("<隱藏> ");
}
//判斷文件屬性,目錄
if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
printf("<DIR> ");
}
//讀者可根據文件屬性表中的內容自行添加判斷文件屬性。
printf("\n");
}
while(FindNextFile(hListFile, &FindFileData));
}
return 0;
}

/* ************************************
* int main(int argc, PCHAR argv[])
* 功能 調用ListFileInDrectory
* 遍歷目錄下的文件和子目錄
* 參數 argv[1]爲需遍歷的路徑,如果爲空則獲取
* 當前路徑
*************************************
*/
int main(int argc, char *argv[])
{
if(argc == 2)
{
EnumerateFileInDrectory(argv[1]);
}
else
{
CHAR szCurrentPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH,szCurrentPath);
EnumerateFileInDrectory(szCurrentPath);
}
getchar();
return 0;
}
複製代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章