SDK遞歸調用遍歷目錄樹

//遞歸調用遍歷目錄樹

/*頭文件*/
#include<windows.h>
#include<stdio.h>

/*預處理申明*/
#pragma comment (lib,"User32.lib")   //調用User32.dll 在這裏""裏面不能有空格

/*函數申明*/
DWORD ListAllFileInDirectory( LPSTR szPath);

/* 全局變量 */
//記錄所有文件和目錄

DWORD dwTotalFileNum = 0;

/**********************************************
// DWORD ListAllFileInDirectory ( LPSTR szPath)
// 功能:遍歷目錄及所有子目錄,打印路徑
// 參數:LPSTR szPath,爲需遍歷的目錄
// 返回值:0代表執行完成,1 代表發生錯誤
***********************************************/

DWORD ListAllFileInDirectory ( 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("<DIR>");
    ListAllFileInDirectory(szFullPath);
   }
  }while( FindNextFile (hListFile, &FindFileData) );
 }
 return 0;
}

/****************************************************
// int main(int argc, PCHAR argv[])
// 功能:調用ListAllFileInDirectory
//       遍歷目錄下的文件和子目錄
//參數:argv[1]爲需遍歷的路徑,如果爲空則獲取當前路徑
*****************************************************/
int main(int argc, PCHAR argv[])
{
 if(argc == 2)
 {
   ListAllFileInDirectory(argv[1]);
 }
 else
 {
  CHAR szCurrentPath [MAX_PATH];
  GetCurrentDirectory( MAX_PATH, szCurrentPath);
  ListAllFileInDirectory(szCurrentPath);
 }
 printf("\n");
 return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章