统计电脑中文件总数

没事无聊写着玩的,也就是熟练运用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秒的样子...(这个速度应该还和电脑配置有关的)

 各位不防也试试??

转载于:https://www.cnblogs.com/Cryking/archive/2012/11/13/2767736.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值