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;
}

本文爲作者原創,如果喜歡,請點個贊,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章