- #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头文件遍历目录
最新推荐文章于 2024-05-09 16:07:15 发布