C++纯WinAPI实现遍历目录下的所有文件
话不多说,直接上代码。
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <bits/stdc++.h>
using namespace std;
long cnt=0;
void viewfiles(char *directory)
{
WIN32_FIND_DATA fdFindData;
HANDLE hFind;
char *filename;
int count=0;
BOOL done;
filename=new char[strlen(directory)+5];
strcpy(filename,directory);
strcat(filename,"\\*.*");
hFind=FindFirstFile(filename,&fdFindData);
delete[] filename;
done=hFind!=INVALID_HANDLE_VALUE;
while(done)
{
if(strcmp(fdFindData.cFileName,".") && strcmp(fdFindData.cFileName,".."))
{
filename=new char[strlen(directory)+strlen(fdFindData.cFileName)+2];
strcpy(filename,directory);
strcat(filename,"\\");
strcat(filename,fdFindData.cFileName);
if((fdFindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)==FILE_ATTRIBUTE_DIRECTORY) {
viewfiles(filename);
} else {
cout << "文件名:" << filename << endl;
cnt++;
}
delete[] filename;
}
done=FindNextFile(hFind,&fdFindData);
}
FindClose(hFind);
}
int main() {
cout << "输入索引名称:" << endl;
char directory[MAX_PATH];
gets(directory);
cout << endl;
clock_t start_time=clock();
viewfiles(directory);
cout << endl;
printf("\n----------\n遍历完毕!\n统计数据:\n共遍历文件:%ld个\n共用时%.2lf秒\n平均速度:%.2lf个文件/秒\n----------\n", cnt, (double)(clock()-start_time)*1.0/CLOCKS_PER_SEC, cnt / ((double)(clock()-start_time)*1.0/CLOCKS_PER_SEC));
cin.clear();
system("pause");
return 0;
}
本文为作者原创,如果喜欢,请点个赞,谢谢!