C++中读取文件可以采用几个函数分别为,_findfirst、_findnext、_findclose。其中还要借助结构体 struct _finddata_t,_finddata_t主要用来存储各种文件的信息。

struct _finddata64i32_t {unsigned    attrib;__time64_t  time_create;    /* -1 for FAT file systems */__time64_t  time_access;    /* -1 for FAT file systems */__time64_t  time_write;_fsize_t    size;char        name[260];
};

其中 unsigned attribute 表示文件的属性,分别有以下几种。

_A_ARCH(存档)
_A_HIDDEN(隐藏)
_A_NORMAL(正常)
_A_RDONLY(只读)
_A_SUBDIR(文件夹)
_A_SYSTEM(系统)

time_t time_create: 
这个time_create变量是用来存储文件创建时间的,time_t 类型本质是就是一个整型。 
time_t time_access: 
文件最后一次被访问的时间。 
time_t time_write: 
文件最后一次被修改的时间。 
然后是文件大小和文件名: 
_fsize_t size:

文件的大小。这里的_fsize_t是unsigned long类型,表示文件的字节数。

long _findfirst( char *filespec, struct _finddata_t *fileinfo ); 
返回值: 
如果查找成功的话,将返回一个long型的唯一的查找用的句柄(就是一个唯一编号)。这个句柄将在_findnext函数中被使用。若失败,则返回-1。 
参数: 
filespec:标明文件的字符串,可支持通配符。比如:*.c,则表示当前文件夹下的所有后缀为C的文件。 
fileinfo :这里就是用来存放文件信息的结构体的指针。这个结构体必须在调用此函数前声明,不过不用初始化,只要分配了内存空间就可以了。 
函数成功后,函数会把找到的文件的信息放入这个结构体中。

int _findnext( long handle, struct _finddata_t *fileinfo ); 
返回值: 
若成功返回0,否则返回-1。 
参数: 
handle:即由_findfirst函数返回回来的句柄。 
fileinfo:文件信息结构体的指针。找到文件后,函数将该文件信息放入此结构体中。

int _findclose( long handle ); 
返回值:成功返回0,失败返回-1。 
参数: handle :_findfirst函数返回回来的句柄。

大家看到这里,估计都能猜到个大概了吧?先用_findfirst查找第一个文件,若成功则用返回的句柄调用_findnext函数查找其他的文件,当查找完毕后用,用_findclose函数结束查找。

win10下编译出错:0x00007FFD53320B1D (ntdll.dll)

此外由于在win10系统下不知道是我个人原因还是大部分人都有的的问题在编译时findnext会报错,这个问题困扰了我一天。后来发现是类型的问题。 因为_findnext()返回类型为intptr_t而非long型,从“intptr_t”转换到“long”丢失了数据。只需要把一般写的

long HANDLE
改为
intptr_t HANDLE
既可以运行

下面放亲测可以运行的代码,读取文件夹及子文件夹里面的目录:

头文件要包含#include<io.h>

 void findfile(string path,string mode){_finddata_t file;intptr_t HANDLE;string Onepath = path + mode;HANDLE = _findfirst(Onepath.c_str(), &file);if (HANDLE == -1L){cout << "can not match the folder path" << endl;system("pause");}do {//判断是否有子目录  if (file.attrib & _A_SUBDIR){//判断是否为"."当前目录,".."上一层目录if ((strcmp(file.name, ".") != 0) && (strcmp(file.name, "..") != 0)){string newPath = path +"\\" + file.name;findfile(newPath,mode);}}else{cout << file.name << " " << endl;}} while (_findnext(HANDLE, &file) == 0);_findclose(HANDLE);}
int main(int argc, char **argv)
{string mode = "\\*.*";string path = "F:\\duquceshi";findfile(path,mode);system("pause");return 0;
}

也可以在命令行中用dir/b>wenjianming.txt 这样就会生成在这个文件夹下所有文件的目录。其中还会有一行文件的名字。

参考资料:https://blog.csdn.net/damant/article/details/50833845?locationNum=2

https://blog.csdn.net/eli00001/article/details/52386433

C++ 中利用 _findfirst遍历所有文件夹及文件,以及findnext win10报错解决办法相关推荐

  1. idea安装及项目导入过程中pom报错解决办法

    1.idea安装可用破解版或者在淘宝上买正版账号(20多块钱一年,挺便宜的) 2.pom报错解决办法: 在项目导入过程中pom报错: 原因:相关jar包未下载完.(下载速度慢,因为下载的链接是国外的节 ...

  2. 文件夹隐藏属性项灰色(无法更改)解决办法

    原因:电脑或者U盘中毒所致 解决方案如下:代码是网上大神缩写哈,非本人. 批量文件夹单个恢复均适用,快捷的批量取消和设置隐藏属性和系统属性,真是佩服那位大神,o(≧v≦)o~~好棒,对大神标表示感谢. ...

  3. 由于列表中存在相同实例导致insert_many报错解决办法

    在使用insert_many对mongodb进行多文档插入时报错 pymongo.errors.BulkWriteError: batch op errors occurred 但奇怪的是这样没问题 ...

  4. VS生成的exe文件在VS运行没问题,在文件夹打开直接运行出问题的bug解决办法

    我在window10 中的Visual Studio2017编写的C++文件在VS内运行没问题: 如图: 但是在VS外部,通过文件夹直接打开exe文件,出现运行问题,如找不到文件,或者运行后闪退现象, ...

  5. 打开ftp服务器上的文件夹时出错505,FTP提示505错误解决办法

    php 升级排错 lnmp 环境下,升级php版本,模块都加载完成,数据库,nginx 设置都完好,但php 只能用ip 访问数据库,不能用localhost,处理要设置php.ini 的三个mysq ...

  6. Ubuntu20.04下没有亮度调节且找不到/sys/class/backlight文件夹(backlight里为空)的解决办法

    首先修改grub文件,终端输入: sudo gedit /etc/default/grub 1.把这两行: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash& ...

  7. 未能将文件 *** \bin\Release\**.dll 复制到 \obj\Release\Package\PackageTmp\bin\***.dll VS发布程序报错 解决办法

    这种问题时bin下面的Release文件夹为空造成的 解决办法: 1.找到引用的dll所在项目,然后点击如下图中的下拉框,将Debug换成Release,然后右击项目生成 2.查看引用dll所在项目的 ...

  8. 安装wps导致 application/kset 上传文件类型报错解决办法

    电脑中安装wps上传execl时,上传.xls文件时 报错 application/kset 文件类型不正确 打印array() print_r($_FILES ) 结果如下: Array ( [us ...

  9. Ros代码迁移,编译头文件报错解决办法

    在使用源码编译安装的Ros环境后,把原来机器上的代码拷贝过来,重新编译. 报错 具体编译报错如下: ~/hellolinux/slam/src/robotChassis/include/RosBase ...

最新文章

  1. 『流畅的Python』第14章:可迭代的对象、迭代器和生成器
  2. python 批量resize性能比较
  3. python工作-Python自动化运维|Python语言工作岗位待遇如何?
  4. BRCM5.02编译七:No package 'uuid' found
  5. CodeForces - 1343E Weights Distributing(最短路)
  6. 如何获取系统的临时目录路径?
  7. 原创内容将成网络视频的一支奇军
  8. 硬核黑科技告诉你,漫威十年到底有多少个角色?
  9. 清华霸榜,长沙理工异军突起!第三届 CCF CCSP落下帷幕
  10. TF2.0—tf.keras.losses.BinaryCrossentropy
  11. docker 容器启动顺序_Docker高手进阶 - Docker Compose到底是什么
  12. c语言中头文件iostream,程序中为什么要包含头文件iostream.h?
  13. 【老生谈算法】matlab实现LEACH 算法——LEACH 算法
  14. echarts中环形图加边框
  15. win10制作软盘,xp下进行编译,最后回到win10运行
  16. 令克软件再推OpenAPI与MAS系统服务,强大引擎赋能券商多元化发展
  17. cad能整体比例缩小吗_如何用cad将图整体比例放大
  18. C语言中scanf()函数中的是什么
  19. 四位行波进位加法器_【HDL系列】超前进位加法器原理与设计
  20. 西门子PLC硬件知识

热门文章

  1. PathInfo模式的支持
  2. abaqus6.13+vs2012+ivf2013用户子程序关联步骤
  3. office如何打开多个excel文件窗口
  4. 四川大学计算机学院现代软件工程(双语 百度云,四川大学2012软件工程导论(双语) (A 闭 )...
  5. Consider defining a bean of type ‘com.muses.taoshop.item.service.IItemService‘ in your configuration
  6. mysql jdbc url 时间_mysqlJDBC连接池url时区陷阱
  7. shell脚本:sh、bash、dash的关系
  8. java基于ssm开发的弹幕视频网站源码
  9. StratoVirt 中的 PCI 设备热插拔实现
  10. RSD的面向任务有何不同——任务目录