读书人

统计计算机所有文件

发布时间: 2012-12-23 11:28:15 作者: rapoo

统计电脑所有文件
没事无聊写着玩的,也就是熟练运用API而已,没什么技术可言...

#include <windows.h> #include <algorithm> #include <iostream> #include <iomanip> #include <fstream> #include <string> using namespace std; static int count=0; //记录文件个数  void FindInAll(string & Path,fstream & outfile) {     string szFind;     szFind=Path;     szFind+="*.*";     WIN32_FIND_DATA FindFileData;//WIN32_FIND_DATA结构包含文件的全部信息     HANDLE hFind=FindFirstFile(szFind.c_str(),& FindFileData);//FindFirstFile根据文件名查找文件     if(hFind==INVALID_HANDLE_VALUE)         return;     do     {         if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //如果找到的是目录,则进入此目录进行递归         {             string szFile;             //去掉目录中的.和..目录             szFile=Path+FindFileData.cFileName+"\\";             string test=szFile.substr(szFile.length()-3,szFile.length());             if(test=="\\.\\"||test=="..\\")                 continue;             FindInAll( szFile, outfile);         }         else //找到的是文件         {             string szFile;             szFile=Path+FindFileData.cFileName;             outfile<<szFile<<endl;             ::count=::count+1;         }     }     while(FindNextFile(hFind,& FindFileData));     FindClose(hFind); }  int main() {     //用来记录程序运行所花时间     clock_t start,finish;    double totaltime;    start=clock();//计时开始     cout<<"***********************************************************"<<endl;     cout<<"---------------Created By Cryking 2012.11.02---------------"<<endl;     cout<<"本程序自动遍历电脑所有文件(包括隐藏文件),时间较长,请耐心等待..."<<endl;     cout<<"***********************************************************"<<endl;     fstream outfile("allfile.txt",ios::out);     cout<<"----------------遍历磁盘所有文件开始:-----------------------"<<endl;     outfile<<setw(3)<<"------遍历磁盘所有文件开始:-----------"<<endl;     //遍历整个电脑的磁盘     int DSLength = GetLogicalDriveStrings(0,NULL);//得到驱动器总长度     char * Path=new char[DSLength];     GetLogicalDriveStrings(DSLength,Path);//得到第一个驱动器地址信息     while(Path!=NULL)     {         //直接遍历D盘所有文件         if((string)Path=="") //路径出错             break;//跳出循环         cout<<"正在遍历"<<Path<<"盘文件,请等待..."<<endl;         FindInAll((string)Path,outfile);         Path=Path+strlen(Path)+1;//根据当前驱动器地址获得下一个驱动器地址     }     locale::global(locale("C"));     finish=clock();//计时结束     totaltime=(double)(finish-start)/CLOCKS_PER_SEC;     outfile<<setw(3)<<"------遍历磁盘所有文件结束-----------"<<endl;     outfile<<setw(3)<<"本次遍历所花时间:"<<totaltime<<"秒"<<endl;     outfile<<setw(3)<<"本电脑共有文件数:"<<::count<<endl;     outfile<<setw(3)<<"------------遍历完成---------------"<<endl;     outfile.close();     cout<<"遍历完成,请查看该目录下的allfile.txt文件!"<<endl;     system("pause");     return 0; }


程序运行的时间没我想象的那么慢,用了递归,而且所有文件路径信息全写到文件了(嘿嘿,貌似可以用来干些坏事),运行完后文件大概有30M,如果用记事本打开的话有点慢,建议用UE打开,看看我的结果

------遍历磁盘所有文件结束-----------

本次遍历所花时间:105.578秒

本电脑共有文件数:251949

------------遍历完成---------------

25万多文件,全部查找并写入文件一共费时1分钟45秒的样子...,速度应该还可以吧(这个速度应该还和电脑配置有关的)

各位不防也试试??

读书人网 >编程

热点推荐