文档章节

遍历磁盘目录

南楼
 南楼
发布于 2017/04/10 21:31
字数 684
阅读 9
收藏 0

 #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;
}

图片
图片
图片

© 著作权归作者所有

南楼
粉丝 0
博文 7
码字总数 5247
作品 0
沈阳
程序员
私信 提问
文件目录树 索引(存储)讨论

0x01. 问题来源 程序要定时扫描某个目录下的所有文件 某程序需要对一个(或多个)目录下的文件进行操作(读/写),目录深度不确定。 我用Windows API / linux Dir 结构进行遍历,速度很慢。且第二...

little_kid
2015/03/09
548
1
XiaoBa勒索病毒变种分析简报

  概述   XiaoBa勒索病毒,是一种新型电脑病毒,是一款国产化水平极高的勒索病毒,主要以邮件,程序木马,网页挂马的形式进行传播。这种病毒利用各种加密算法对文件进行加密,被感染者一...

FreeBuf
2018/05/04
0
0
LevelDB 入门 —— 全面了解 LevelDB 的功能特性

本节我们将全面了解一下 LevelDB 的各种特性。LevelDB 的开发语言是 C++,考虑到会使用 C++ 语言的同学不是很多,在本节我们将使用 Java 语言来描述 LevelDB 的特性。其它语言栈的同学也不必...

技术小能手
01/11
0
0
如何减少服务器上rsync 的io磁盘与主服务器io 占用的问题

对于服务上rsync 的io磁盘与主服务器io 占用的问题,我们可以采用ionice来进行有效解决: 服务器是一台做数据分析的BI服,每天同步的数据文件有上万个,目录下也占用了很多零碎的目录和文件,...

holy2009
2018/06/28
0
0
文件系统--procfs中进程目录的问题

procfs是一个特殊的文件系统,和sysfs一样,它是一个只有在你看的时候才会存在的文件系统,它们一样都是用来进行内核-用户态通信的,它们和netlink或者syscall的区别在于它们是文件的方式,大...

晨曦之光
2012/04/10
133
0

没有更多内容

加载失败,请刷新页面

加载更多

etcd 在超大规模数据场景下的性能优化

作者 | 阿里云智能事业部高级开发工程师 陈星宇(宇慕) 概述 etcd是一个开源的分布式的kv存储系统, 最近刚被cncf列为沙箱孵化项目。etcd的应用场景很广,很多地方都用到了它,例如kubernete...

zhaowei121
11分钟前
0
0
MYSQL主从介绍

MYSQL软件概念 MYSQL是一款数据库,关系型数据库系统; MYSQL主要用于存放:员工姓名、身份证ID、商城订单及金额、销售业绩及报告,学生考试成绩、网站帖子、论坛用户信息等; MYSQL在WEB架构...

寰宇01
14分钟前
0
0
org.apache.cxf.interceptor.Fault: null

出现这个异常的原因:json字符串为null 所以会出现这个错误。需要加上条件判断。 如果不是这个原因,可以参考: https://blog.csdn.net/rshw123456/article/details/8001677...

嘿嘿嘿IT
14分钟前
0
0
gradle控制so库的输出位置

gradle.taskGraph.beforeTask { task -> String abi = "lib/armeabi/" def TASK_NAME = "transformNativeLibsWithStripDebugSymbolFor" String buildType = "debug" //S......

Gemini-Lin
14分钟前
1
0
AndroidL 开机展示Keyguard锁屏机制初探

目录 目录 锁屏时序图 开机启动到PhoneWindowManager的systemReady方法 锁屏加载流程 PhoneWindowManager KeyguardServiceDelegate KeyguardServiceWrapper KeyguardService KeyguardViewMe......

天王盖地虎626
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部