C/C++ 遍历文件夹内指定文件

  • 简述问题
  • 源码
  • 问题解决详述

简述问题

基本的遍历代码网上都有,代码中用到的技术网上也可以查到,这里我对网上的代码进行了 改造,改造内容如下:
1、改造了windows下一个遍历bug问题,涉及到一个系统文件;
2、网上的有的源码只能满足于X86 模式下,这里进行了改造,使代码变得通用;
3、网上的有的源码只能遍历一级目录, 例如:我要遍历一个文件夹下的所有txt文件,我的路径必须是 F:\SteamLibrary\ ,才能成功遍历,否则遍历不到;


4、至于跨平台 无非就是再写一个 linux下的遍历 然后使用 #ifdef WIN32 #else 组合一下即可

源码

#include <direct.h>
#include <io.h>
#include <windows.h>
#include <iostream>
#include <math.h>
#include <time.h>
#include <string.h>
#include <string>
using namespace std;void GetFiles(string path, string maker, vector<string>& files)
{string S_maker = "\\*"; /*加上通配符*///文件句柄intptr_t   hFile = 0;//文件信息struct _finddata_t fileinfo;string p;if ((hFile = _findfirst(p.assign(path).append(S_maker).c_str(), &fileinfo)) != -1){do{//如果是目录,迭代之,如果不是,加入列表if ((fileinfo.attrib & _A_SUBDIR)){if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0 && strcmp(fileinfo.name, "qqpcmgr_docpro")){GetFiles(p.assign(path).append("\\").append(fileinfo.name), maker, files);}}else{string midsrc = p.assign(path).append("\\").append(fileinfo.name);int position = midsrc.find_last_of(".");string inmaker = midsrc.substr(position);if (inmaker == maker){files.push_back(midsrc);}}} while (_findnext(hFile, &fileinfo) == 0);_findclose(hFile);}
}int main()
{vector<string> files;GetFiles("E:", ".vep", files); /*E: 后无需加 “/” 或者 “\\”*/cout << "The run time is:" << (double)clock() / CLOCKS_PER_SEC << "s" << endl;cout << "files.size()e is:" << files.size() << endl;for (size_t i = 0; i < files.size(); i++){cout << files.at(i) << endl;}cout << "Hello CMake." << endl;return 0;
}

问题解决详述

1、涉及到的一个系统问题(如果你的文件目录下有 qqpcmgr_docpro 文件(系统自动生成),请关注这一个点,如果没有请略过)
windows下如果安装 电脑管家 这一类的软件,他会在你的磁盘里生成一个 目录(qqpcmgr_docpro),具体的删除方法网上也能找到,但不能彻底删除

如果在遍历目录的时候不删除或者规避这个目录的时候,会报以下错误:(我只是还原了错误,前提是没有这个文件程序能正常遍历) 我的做法是在程序中规避这个文件夹

2、网上的源码大多数只能满足于X86 模式下问题
网上针对于 _findfirst 函数的返回值标注的是 long类型,但是写成 long 类型只能在 X86 模式下运行,通过查看源码,发现它的返回值为:intptr_t ; 当使用 intptr_t 作为 _findfirst函数的返回值时,X86或者X64都可以运行

3、网上的源码大多数只能遍历一级目录问题
稍微修改一下程序内部(加一个判断)

C/C++遍历文件夹指定文件相关推荐

  1. python技巧:删除文件夹里子文件夹指定文件以外的文件

    删除文件夹里子文件夹指定文件以外的文件 import os path='C:\\Users\\123\\Desktop\\data' #文件夹路径 for i in os.listdir (path) ...

  2. python os.walk 指定遍历深度_python遍历文件夹,指定遍历深度与忽略目录的方法

    背景 需要在文件夹中搜索某一文件,找到后返回此文件所在目录.用最常规的os.listdir()方式实现了一版,但执行时报错:递归超过最大深度.于是自己添加了点功能,之所有写此函数是为了让它适应不同的项 ...

  3. linux遍历目录删除指定文件,利用shell脚本遍历文件夹内所有的文件并作整理统计的方法-linux删除文件夹...

    本篇文章扣丁学堂Linux培训小编给读者们分享一下利用shell脚本遍历文件夹内所有的文件并作整理统计的方法,文章具有很好的参考价值,感兴趣的小伙伴就随小编来了解一下吧. 环境: Ubuntu下采用s ...

  4. python遍历指定文件夹下所有文件夹和文件

    示例代码: import ospathName = 'H:\\desktop'for folderName, subfolders, filenames in os.walk(pathName):pr ...

  5. python 遍历文件夹和文件

    文件结构如下图 path = r"文件夹1" 遍历1层下的所有文件名和文件夹名 import os fileList = os.listdir(path) # 遍历1层 print ...

  6. python修改文件后缀_python实现遍历文件夹修改文件后缀

    本文实例为大家分享了python实现遍历文件夹修改文件后缀的具体代码,供大家参考,具体内容如下 用法 python Modifer.py ./ -fp java xml # coding:utf-8 ...

  7. php删除文件代码指定,PHP删除指定文件夹所有文件代码

    在php中系统自带了文件删除函数unlink,但是此文件只是一个文件删除函数,如果我们要删除指定目录中的文件就需要配合其它方法来操作了,下面我给各位朋友介绍. 删除指定文件夹所有文件  代码如下 复制 ...

  8. php遍历文件夹下文件内容_php实现的遍历文件夹下所有文件,编辑删除

    遍历文件夹; 功能:(a)可删除文件 (b)可编辑文本,网页文件 (c)可删除文件夹,前提是该文件夹为空 (d)可建立文件,文件夹,修改文件夹名称 /* 遍历文件夹; 功能:(a)可删除文件 (b)可 ...

  9. [转载] Python递归遍历目录下所有文件查找指定文件

    参考链接: Python目录和文件管理 之前看到网上有人说『os.path.isdir()判断必须写绝对路径』,当时心想Python不是有迭代上下文吗,为什么不行?遂作本文验证之 代码部分 考虑用一个 ...

  10. 利用python将文件夹中子文件夹中的图片数目大于小于指定的数目分类

    利用python将文件夹中子文件夹中的图片数目大于小于指定的数目分类 find ./ -name ".DS_Store" -depth -exec rm {} \;  Mac 删除 ...

最新文章

  1. JSP学习笔记(七):使用JavaBean
  2. Web访问RabbitMQ
  3. Android动态替换dex,Android DexClassLoader动态加载与插件化开发
  4. 内核配置中 ramdisk 大小修改
  5. ole2高级编程技术 pdf_21天快速掌握Python语言,《21天学通Python》PDF版送给你去学...
  6. 使用Css截取字符串
  7. 从程序员到项目经理(9):程序员加油站 -- 再牛也要合群【转载】
  8. Maven实战. 3.7NetBeans Maven插件简单使用
  9. 常见的软件测试方法有,常见的几种软件测试方法都有哪些
  10. 动画设计要考计算机证书吗,影视动画要考哪些证书
  11. 纯css绘制斜线表头
  12. 修改Android应用名称
  13. 数据结构—队列的C语言实现
  14. 固态加装机械计算机不显示,笔记本电脑装了固态硬盘,机械硬盘却无法识别
  15. mysql排序order by asc | desc
  16. Thinkpad E420移除白名单
  17. 四面楚歌,商汤科技该如何在AI领域破局
  18. TCP 为什么需要三次握手?
  19. 梆梆安全的金砖梦想:“安全联结世界”
  20. image 微信小程序flex_微信小程序入门教程之二:页面样式

热门文章

  1. MySql 递归应用
  2. U盘多次格式化或作为系统盘格式化后造成的容量变小解决办法
  3. java微信公众号上传永久素材,微信公众号开发-永久素材的上传
  4. Docker 错误 “port is already allocated” 解决方法
  5. 如何用C语言在控制台输出437代码页编码下的ASCII字符
  6. IDEA Auto build completed with errors解决办法
  7. Oracle 校验统一社会信用代码函数
  8. 地下城与勇士(DNF)异次元裂缝副本(哥布林王国、蠕动之城、兰蒂卢斯的鹰犬、黑色大地、虚无之境 、巴卡尔之城)(童年的回忆)
  9. 关于mysql插入数据报错:Incorrect string value: '\xE9\x81\x93\xE5\x85\xB7...' for column 'gclass' at...
  10. Android 隐藏App的图标