- #include<windows.h>
- #include<iostream>
- #include<string>
- using namespace std;
- //只能處理目錄:lpPath只能是路徑
- void find(char *lpPath)
- {
- char szFind[MAX_PATH];
- char szFile[MAX_PATH];
- WIN32_FIND_DATA FindFileData;
- strcpy(szFind,lpPath);
- strcat(szFind,"//*.*");
- HANDLE hFind=::FindFirstFile(szFind,&FindFileData);
- if(INVALID_HANDLE_VALUE == hFind) return;
- while(TRUE)
- {
- if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- {
- if(FindFileData.cFileName[0]!='.')
- {
- strcpy(szFile,lpPath);
- strcat(szFile,"//");
- strcat(szFile,FindFileData.cFileName);
- find(szFile);
- }
- }
- else
- {
- cout<<FindFileData.cFileName<<endl;
- }
- if(!FindNextFile(hFind,&FindFileData))
- break;
- }
- FindClose(hFind);
- }
- //可同時處理目錄和文件:path可以是路徑,也可以是文件名,或者文件通配符
- void _find(string path){
- //取路徑名最後一個"//"之前的部分,包括"//"
- string prefix=path.substr(0,path.find_last_of('//')+1);
- WIN32_FIND_DATA FindFileData;
- HANDLE hFind=::FindFirstFile(path.c_str(), &FindFileData);
- if(INVALID_HANDLE_VALUE == hFind)
- {
- cout<<"文件通配符錯誤"<<endl;
- return;
- }
- while(TRUE)
- {
- //目錄
- if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- {
- //不是當前目錄,也不是父目錄
- if(FindFileData.cFileName[0]!='.')
- {
- //查找下一級目錄
- _find(prefix+FindFileData.cFileName+"//"+"*.*");
- }
- }
- //文件
- else
- {
- cout<<FindFileData.cFileName<<endl;
- }
- if(!FindNextFile(hFind,&FindFileData))
- break;
- }
- FindClose(hFind);
- }
- void main(){
- //find("E:");//目錄:E盤
- //_find("E://*.*");//E盤下所有文件
- string str="./test"; //這裏指定的是目錄
- //string path;
- //cout<<"請輸入文件通配符:"<<flush;
- //cin>>path;
- // str=str+path;
- find((char*)str.c_str());//可以處理".",".." 不可以處理"*","..//*"
- //_find(str);//可以處理"*","..//*" 不可以處理".",".."
- system("pause");
- }
- 複製代碼
- 其中有個結構體,它是C++自帶的,是這樣的:
- typedef struct _WIN32_FIND_DATA{
- DWORD dwFileAttributes; // 文件屬性
- FILETIME ftCreationTime; // 文件創建時間
- FILETIME ftLastAccessTime; // 文件最後一次訪問時間
- FILETIME ftLastWriteTime; // 文件最後一次修改時間
- DWORD nFileSizeHigh; // 文件長度高 32 位
- DWORD nFileSizeLow; // 文件長度低 32 位
- DWORD dwReserved0; // 系統保留
- DWORD dwReserved1; // 系統保留
- TCHAR cFileName[ MAX_PATH ]; // 長文件名
- TCHAR cAlternateFileName[ 14 ]; // 文件的可選名
- } WIN32_FIND_DATA;
利用windows.h頭文件遍歷目錄
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.