遍历磁盘目录

 #include<iostream>
#include<string>
#include<io.h>       //结构体srtuct _finddata_t所在头文件
using namespace std;
const int MAXLEN = 1024;   //用于定义目录最大长度数值
unsigned long FILECOUNT = 0;   //用于记录文件数量(文件数量为正数)
void ListDir(const char* pchData) {
 _finddata_t fdata;   //定义查找文件的结构体对象
 long done;    //用于接收文件查找函数返回的句柄
 char tempdir[MAXLEN] = { 0 };   //用于存储文件的目录
 strcat(tempdir, pchData);   //连接字符串,将函数ListDir的参数(所查找的指定目录)连接到数组中
 strcat(tempdir, "\\*.*");   //连接字符串,在_findfirst函数中,第一个参数为文件名,可以用"*.*"来查找所有文件
 done = _findfirst(tempdir, &fdata);   //在_findfirst函数中,第二个参数是_finddata_t结构体指针。
                                       //若查找成功,返回文件句柄,若失败,返回-1。
 if (done != -1) {
  int ret = 0;   //用于接收文件查找函数返回的句柄,并用于while循环判断
  while (ret != -1) {
   if (fdata.attrib != _A_SUBDIR) {   //判断文件属性是否为文件夹
    if (strcmp(fdata.name, "...") != 0 &&
     strcmp(fdata.name, "..") != 0 &&
     strcmp(fdata.name, ".") != 0) {    //文件过滤
     char dir[MAXLEN] = { 0 };   //用于存储文件路径及名称
     strcat(dir, pchData);   //连接字符串,将函数ListDir的参数(所查找的指定目录)连接到数组中
     strcat(dir, "\\");   //连接字符串,在数组dir原本的字符串后加"\"
     strcat(dir, fdata.name);   //连接字符串,在数组dir原本的字符串后加上文件的名称
     cout << dir << endl;   //输出查找的文件
     FILECOUNT++;   //文件数量加1
    }
   }
   ret = _findnext(done, &fdata);   //在_findnext函数中,第一个参数为文件句柄,
                                    //第二个参数为_finddata_t结构体指针。若查找成功,返回0,失败返回-1。
   if (fdata.attrib == _A_SUBDIR&&ret != -1) {   //判断文件属性,如果是文件夹,则递归调用函数ListDir()
                                              //查找该文件下的内容
    if (strcmp(fdata.name, "...") != 0 &&
     strcmp(fdata.name, "..") != 0 &&
     strcmp(fdata.name, ".") != 0) {    //文件过滤
     char pdir[MAXLEN] = { 0 };   //用于存储文件路径及名称
     strcat(pdir, pchData);   //连接字符串,将函数ListDir的参数(所查找的指定目录)连接到数组中
     strcat(pdir, "\\");   //连接字符串,在数组pdir原本的字符串后加"\"
     strcat(pdir, fdata.name);   //连接字符串,在数组pdir原本的字符串后加上文件的名称
     ListDir(pdir);   //递归调用函数ListDir查找该文件夹下的文件
    }
   }
  }
 }
}
int main(void) {
 while (true)   //使用一个while无限循环(循环中判断是否退出循环)
 {
  FILECOUNT = 0;
  char szFileDir[128] = { 0 };   //用于记录需要查找的文件路径(目录)
  cout << "请输入需要查找的文件路径(目录),输入‘e’退出。" << endl;
  cin >> szFileDir;
  if (strcmp(szFileDir, "e") == 0) {   //判断是否退出循环
   break;
  }
  ListDir(szFileDir);   //调用ListDir函数
  cout << "共计" << FILECOUNT << "个文件。" << endl;   //输出目录下文件的总数
 }
 return 0;
}

图片
图片
图片

转载于:https://my.oschina.net/u/3418740/blog/876397

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值