C/C++遍歷Windows文件夾下的所有文件


   因為文件夾中往往包含文件和文件夾。想要遍歷所有的文件,必須遍歷文件夾中所有的文件夾。很顯然,這個描述滿足遞歸的兩個要素:(1)問題的規模在不斷的縮小,且新問題的模式與舊問題相同。很顯然文件夾中含有子文件夾同樣需要遍歷。(2)含有簡單的終止條件,即遇到文件夾下再無文件夾停止。

     C++遍歷文件夾下所有文件如下:

復制代碼
int osmgpxPaser::GetAllgpxFilepathFromfolder(char* Path) { char szFind[MAX_PATH]; WIN32_FIND_DATA FindFileData; strcpy(szFind,Path); strcat(szFind,"\\*.*"); HANDLE hFind=FindFirstFile(szFind,&FindFileData); if(INVALID_HANDLE_VALUE == hFind) return -1; do { if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if(strcmp(FindFileData.cFileName,".")!=0 && strcmp(FindFileData.cFileName, "..")!=0) { //發現子目錄,遞歸之 char szFile[MAX_PATH] = {0}; strcpy(szFile,Path); strcat(szFile,"\\"); strcat(szFile,FindFileData.cFileName); GetAllgpxFilepathFromfolder(szFile); } } else { //找到文件,處理之 std::cout << lpPath << "\\" << FindFileData.cFileName << std::endl; } }while(FindNextFile(hFind,&FindFileData)); FindClose(hFind); return 0; }
復制代碼

這里不得不說一下FindFirstFile()函數。使用它必須引用windows.h頭文件,FindFirstFile第一個參數需要一個路徑,但要寫*.*,表示從所有文件中找到的第一個.第二個參數用於存儲文件信息,找到的文件的文件結構被記錄在WIN32_FIND_DATA結構體里。

另外,如果直接編譯以上代碼可能會出現以下錯誤: error C2664: “FindFirstFileW”: 不能將參數 1 從“char [261]”轉換為“LPCWSTR” ,解決方法為:

把工程設置里去掉UNICODE宏定義:項目->XXX屬性->配置屬性->常規->字符集 改為 “未設置” 就去掉了unicode支持,不過應該回報一個警告。

或在#include <windows.h>之前加上一句 #undef UNICODE


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM