关于 WIN32_FIND_DATA 的数据结构
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 ]; // 8.3格式文件名
} WIN32_FIND_DATA, *PWIN32_FIND_DATA;
#include <iostream>
#include <vector>
#include <windows.h>
using namespace std;
class SearchFile
{
private:
vector<string> result;
public:
vector<string> getResult()
{
auto t = result;
result.clear();
return t;
}
bool search(char *path="C:\\",char *file="exe")
{
HANDLE hFile;
char buffer[MAX_PATH]={0,};
WIN32_FIND_DATA pNextInfo; //搜索得到的文件信息将储存在pNextInfo中;
sprintf(buffer,"%s\\*.*",path);
hFile = FindFirstFile(buffer,&pNextInfo);//请注意是 &pNextInfo , 不是 pNextInfo;
if(!hFile){
return false;
}
string t;
//cout << buffer << endl;
while(FindNextFile(hFile,&pNextInfo))
{
if(pNextInfo.cFileName[0] == '.')//过滤.和..
continue;
//cout << pNextInfo.cFileName << endl;
if(pNextInfo.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
ZeroMemory(buffer,MAX_PATH);
sprintf(buffer,"%s\\%s",path,pNextInfo.cFileName);
//cout << buffer << endl;
search(buffer,file);
}
t.assign(path);
t+='\\';
t.append(pNextInfo.cFileName);
int len = strlen(file);
if(t.substr(t.size()-len)==file)
{
result.push_back(t);//对t对象进行深复制
}
}
return true;
}
};
int main() {
SearchFile s;
//设计了一个SearchFile类来搜索文件,调用search成员函数后,再调用getResult()返回查到的结果,如果搜索失败,getResult()返回NULL
s.search("C:\\Users\\lxw\\OneDrive\\python35","py");
auto result = s.getResult();
for(int i=0;i<result.size();i++)
{
cout << result[i] << endl;
}
return 0;
}
这里的IDE用的是CLion;