没事无聊写着玩的,也就是熟练运用API而已,没什么技术可言...
1 #include <windows.h> 2 #include <algorithm> 3 #include <iostream> 4 #include <iomanip> 5 #include <fstream> 6 #include <string> 7 using namespace std; 8 static int count=0; //记录文件个数 9 10 void FindInAll(string & Path,fstream & outfile) 11 { 12 string szFind; 13 szFind=Path; 14 szFind+="*.*"; 15 WIN32_FIND_DATA FindFileData;//WIN32_FIND_DATA结构包含文件的全部信息 16 HANDLE hFind=FindFirstFile(szFind.c_str(),& FindFileData);//FindFirstFile根据文件名查找文件 17 if(hFind==INVALID_HANDLE_VALUE) 18 return; 19 do 20 { 21 if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //如果找到的是目录,则进入此目录进行递归 22 { 23 string szFile; 24 //去掉目录中的.和..目录 25 szFile=Path+FindFileData.cFileName+"\\"; 26 string test=szFile.substr(szFile.length()-3,szFile.length()); 27 if(test=="\\.\\"||test=="..\\") 28 continue; 29 FindInAll( szFile, outfile); 30 } 31 else //找到的是文件 32 { 33 string szFile; 34 szFile=Path+FindFileData.cFileName; 35 outfile<<szFile<<endl; 36 ::count=::count+1; 37 } 38 } 39 while(FindNextFile(hFind,& FindFileData)); 40 FindClose(hFind); 41 } 42 43 int main() 44 { 45 //用来记录程序运行所花时间 46 clock_t start,finish; 47 double totaltime; 48 start=clock();//计时开始 49 cout<<"***********************************************************"<<endl; 50 cout<<"---------------Created By Cryking 2012.11.02---------------"<<endl; 51 cout<<"本程序自动遍历电脑所有文件(包括隐藏文件),时间较长,请耐心等待..."<<endl; 52 cout<<"***********************************************************"<<endl; 53 fstream outfile("allfile.txt",ios::out); 54 cout<<"----------------遍历磁盘所有文件开始:-----------------------"<<endl; 55 outfile<<setw(3)<<"------遍历磁盘所有文件开始:-----------"<<endl; 56 //遍历整个电脑的磁盘 57 int DSLength = GetLogicalDriveStrings(0,NULL);//得到驱动器总长度 58 char * Path=new char[DSLength]; 59 GetLogicalDriveStrings(DSLength,Path);//得到第一个驱动器地址信息 60 while(Path!=NULL) 61 { 62 //直接遍历D盘所有文件 63 //string Path="d:\\"; 64 if((string)Path=="") //路径出错 65 break;//跳出循环 66 cout<<"正在遍历"<<Path<<"盘文件,请等待..."<<endl; 67 FindInAll((string)Path,outfile); 68 Path=Path+strlen(Path)+1;//根据当前驱动器地址获得下一个驱动器地址 69 } 70 locale::global(locale("C")); 71 finish=clock();//计时结束 72 totaltime=(double)(finish-start)/CLOCKS_PER_SEC; 73 outfile<<setw(3)<<"------遍历磁盘所有文件结束-----------"<<endl; 74 outfile<<setw(3)<<"本次遍历所花时间:"<<totaltime<<"秒"<<endl; 75 outfile<<setw(3)<<"本电脑共有文件数:"<<::count<<endl; 76 outfile<<setw(3)<<"------------遍历完成---------------"<<endl; 77 outfile.close(); 78 cout<<"遍历完成,请查看该目录下的allfile.txt文件!"<<endl; 79 system("pause"); 80 return 0; 81 }
出乎意料的是程序运行的时间没我想象的那么慢,用了递归,而且所有文件路径信息全写到文件了(嘿嘿,貌似可以用来干坏事··),运行完后文件大概有30M,如果用记事本打开的话有点慢,建议用UE打开,看看我的结果
------遍历磁盘所有文件结束-----------
本次遍历所花时间:105.578秒
本电脑共有文件数:251949
------------遍历完成---------------
25W多文件,全部查找并写入文件一共费时1分钟45秒的样子...(这个速度应该还和电脑配置有关的)
各位不防也试试??