#include
#include
/* 預處理申明 */
//#pragma comment (lib, "User32.lib")
/* 函數申明 */
DWORD ListAllFileInDrectory(LPSTR szPath);
/* 全局變量 */
//記錄所有的文件和目錄數
DWORD dwTotalFileNum = 0;
/* ************************************
* DWORD ListAllFileInDrectory(LPSTR szPath)
* 功能 遍歷目錄及所有子目錄,打印路徑
*
* 參數 LPTSTR szPath,為需遍歷的目錄
*
* 返回值 0代表執行完成,1代碼發生錯誤
**************************************/
DWORD ListAllFileInDrectory(LPSTR szPath)
{
CHAR szFilePath[MAX_PATH];
WIN32_FIND_DATA FindFileData;
HANDLE hListFile;
CHAR szFullPath[MAX_PATH];
//構造代表子目錄和文件夾路徑的字符串,使用通配符“*”
lstrcpy(szFilePath, szPath);
lstrcat(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;
}
//構造成全路徑
wsprintf(szFullPath,"%s\\%s",
szPath,FindFileData.cFileName);
dwTotalFileNum++;
//打印
printf("\n%d\t%s\t",dwTotalFileNum,szFullPath);
//如果是目錄,則遞歸調用,列舉下級目錄
if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
printf("
");
ListAllFileInDrectory(szFullPath);
}
}
while(FindNextFile(hListFile, &FindFileData));
}
return 0;
}
/* ************************************
* int main(int argc, PCHAR argv[])
* 功能 調用ListAllFileInDrectory
* 遍歷目錄下的文件和子目錄
*
* 參數 argv[1]為需遍歷的路徑,如果為空則獲取
* 當前路徑
*
*
**************************************/
int main(int argc, PCHAR argv[])
{
if(argc == 2)
{
ListAllFileInDrectory(argv[1]);
}
else
{
CHAR szCurrentPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH,szCurrentPath);
ListAllFileInDrectory(szCurrentPath);
}
printf("%d",MAX_PATH);
return 0;
}