当前位置:编程学习 > C/C++ >>

统计电脑所有文件

没事无聊写着玩的,也就是熟练运用API而已,没什么技术可言...
[cpp] 
#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打开,看看我的结果
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,