C/C++遍歷Windows文件夾下的所有文件
阿新 • • 發佈:2017-07-06
pre invalid col filename 可能 遞歸 項目 != 一個
因為文件夾中往往包含文件和文件夾。想要遍歷所有的文件,必須遍歷文件夾中所有的文件夾。很顯然,這個描述滿足遞歸的兩個要素:(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
C/C++遍歷Windows文件夾下的所有文件