用FindFirstFile和FindNextFile函式歷遍指定目錄的所有檔案
阿新 • • 發佈:2018-12-09
本文利用FindFirstFile(),FindNextFile()函式歷遍指定目錄的所有檔案,最基礎的歷遍所有檔案。一下程式碼尚無法解決檔名為中文時的亂碼問題,以及無法分別無後綴的檔名和資料夾名的區別。
lpFindFileData 用於儲存搜尋得到的檔案資訊。lpFindFileData用於獲取檔案資訊。通常,最初的兩次搜尋得到的檔名為:”.” 、”..”,分別代表當前目錄和上級目錄。寫程式碼時需要注意。
http://blog.csdn.net/u012005313/article/details/46490437
FindFirstFile()用於獲得指定目錄的第一個檔案。其原型為:lpFileName 用於指定搜尋目錄和檔案型別,可以用萬用字元,初次使用需要注意 \ 需要用轉義字元表達。即:D:\\C++ 6.0\\;lpFindFileData 用於儲存搜尋得到的檔案資訊。FindFirstFile() 返回HANDLE型別,為下一次搜尋提供資訊。當搜尋失敗時,返回INVALID_HANDLE_VALUE- HANDLE WINAPI FindFirstFile(
- In LPCTSTR lpFileName,
- Out LPWIN32_FIND_DATA lpFindFileData
- );
- BOOL WINAPI FindNextFile(
- In HANDLE hFindFile,
- Out LPWIN32_FIND_DATA lpFindFileData
- );
- HANDLE hFile;
- LPCTSTR lpFileName = L“.\*.”; //指定搜尋目錄和檔案型別,如搜尋d盤的音訊檔案可以是”D:\.mp3”
- WIN32_FIND_DATA pNextInfo; //搜尋得到的檔案資訊將儲存在pNextInfo中;
-
hFile = FindFirstFile(lpFileName,&pNextInfo);//請注意是 &pNextInfo , 不是 pNextInfo;
- if(hFile == INVALID_HANDLE_VALUE)
- {
- //搜尋失敗
- exit(-1);
- }
- while(FindNextFile(hFile,&pNextInfo))
- {
- if(pNextInfo.cFileName[0] == ‘.’)//過濾.和..
- continue;
- cout<<”得到檔案:”<<pNextInfo.cFileName<<endl;
- }
標頭檔案 #include <windows.h>
- HANDLE file;
- LPCTSTR lpFileName=“浙江黃大豆\\*.*”;
- WIN32_FIND_DATA pNextInfo;
- file=FindFirstFile(lpFileName, &pNextInfo);
- if (file == INVALID_HANDLE_VALUE)
- {
- cout<<”搜尋失敗”<<endl;
- system(”pause”);
- exit(0);
- }
- while (FindNextFile(file, &pNextInfo))
- {
- if (pNextInfo.cFileName[0] == ‘.’)
- continue;
- cout<<”得到檔案:”<<pNextInfo.cFileName<<endl;
- }
得到資料夾(黑豆)中的所有.jpg結尾的檔案
- void findfile(void)
- {
- /*
- string path;
- cout<<”inpt(xx\xx\*.*): ”<<endl;
- cin>>path;
- cout<<path<<endl;
- */
- HANDLE file;
- LPCTSTR lpFileName=“黑豆\*.jpg”;//path.c_str();
- WIN32_FIND_DATA pNextInfo;
- file=FindFirstFile(lpFileName, &pNextInfo);
- if (file == INVALID_HANDLE_VALUE)
- {
- cout<<”搜尋失敗”<<endl;
- system(”pause”);
- exit(0);
- }
- cout<<”得到檔案:”<<pNextInfo.cFileName<<endl;//請注意這句
- int count=1;
- while (FindNextFile(file, &pNextInfo))
- {
- if (pNextInfo.cFileName[0] == ‘.’)
- continue;
- cout<<”得到檔案:”<<pNextInfo.cFileName<<endl;
- count++;
- }
- cout<<”count = ”<<count<<endl;
- }