需要用来存储文件各种信息的结构体:struct_finddata_t 及查找函数:_findfirst、_findnext和_fineclose。

[1] _finddata_t 结构体

struct _finddata_t{unsigned     attrib;time_t       time_create;time_t       time_access;time_t       time_write;_fsize_t     size;char         name[_MAX_FNAME];};

unsigned atrrib:

它存储一个 unsigned 单元,用于表示文件的属性。文件属性是用位表示的,主要有以下一些:_A_ARCH(存档)、_A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、_A_SUBDIR(文件夹)、_A_SYSTEM(系统)。这些都是在<io.h>中定义的宏,可以直接使用。既然是位表示,那么当一个文件有多个属性时,它往往是通过位或的方式,来得到几个属性的综合。例如只读+隐藏+系统属性,应该为:_A_HIDDEN| _A_RDONLY | _A_SYSTEM 。

time_t time_create:

这里的time_t是一个变量类型,用来存储时间的。time_create变量是用来存储文件的创建时间。

time_t time_access:

文件最后一次被访问的时间。

time_t time_write:

文件最后一次被修改的时间。

_fsize_t size:

文件的大小,表示文件的字节数。

char name[_MAX_FNAME]:

文件的文件名。这里的_MAX_FNAME是一个常量宏,它在<stdlib.h>头文件中被定义,表示的是文件名的最大长度。

如何把一个硬盘文件的文件信息“存到”这个结构体所表示的内存空间里去呢?这就要靠_findfirst、_findnext和_fineclose三个函数的搭配使用了。

[2] _findfirst 函数

long _findfirst( char *filespec,struct _finddata_t *fileinfo );

返回值:

如果查找成功的话,将返回一个long型的唯一的查找用的句柄(就是一个唯一编号)。这个句柄将在_findnext函数中被使用。若失败,则返回-1。

参数:

filespec:标明文件的字符串,支持通配符。比如:*.c,则表示当前文件夹下的所有后缀为C的文件。

fileinfo :这里就是用来存放文件信息的结构体的指针。这个结构体必须在调用此函数前声明,不过不用初始化,只要分配了内存空间就可以了。函数成功后,函数会把找到的文件的信息放入这个结构体中。

[3] _findnext函数

int _findnext( long handle, struct_finddata_t *fileinfo );

返回值:

若成功返回0,否则返回-1。

参数:

handle:即由_findfirst函数返回回来的句柄。

fileinfo:文件信息结构体的指针。找到文件后,函数将该文件信息放入此结构体中。

[4] _findclose函数

int _findclose( long handle);

返回值:
成功返回0,失败返回-1。

参数:

handle:即由_findfirst函数返回回来的句柄。

试例:编写一个查找文件夹下所有文件或文件夹路径的函数

#include<Shlwapi.h>
#include<io.h>
#include<string>
#include<vector>
usingnamespacestd;#define FILE_FLODER 0X0001  //子文件夹
#define FILE_FILE     0X0002 //文件longGetPathArr(conststring &ptStrPath,vector<string>&strPathArr,shorttype ){if (ptStrPath.empty() || _access(ptStrPath.c_str(), 0) != 0)//判断路径是否存在return(0);if (!PathIsDirectory(ptStrPath.c_str()))//判断是否为文件夹return(-1);strPathArr.clear();_finddata_t    fileInfo;string         strSearch = ptStrPath + "\\*.*";//搜索文件夹下所有文件long           handle  = 0;   handle =_findfirst(strSearch.c_str(), &fileInfo);if (-1 ==handle)return(0);while (0 ==_findnext(handle, &fileInfo)){if (stricmp(fileInfo.name,"..") == 0 || stricmp(fileInfo.name,".") == 0)//如果为上级目录或当前目录continue;if ((fileInfo.attrib&_A_SUBDIR) == _A_SUBDIR)//如果为文件夹{if(type == FILE_FLODER)strPathArr.push_back(ptStrPath + "\\" + fileInfo.name);}if ((fileInfo.attrib&_A_ARCH) == _A_ARCH)//如果为文档   {if(type == FILE_FILE)strPathArr.push_back(ptStrPath + "\\" + fileInfo.name);}}_findclose(handle);//关闭句柄return(1);
}

c语言 遍历搜索文件夹(获取文件夹中所有内容)相关推荐

  1. java读取hdfs文件夹_HDFS 读取、写入、遍历文件夹获取文件全路径、append

    1.从HDFS中读取数据 Configuration conf = getConf(); Path path = new Path(pathstr); FileSystem fs = FileSyst ...

  2. HDFS 读取、写入、遍历文件夹获取文件全路径、append

    版权声明:本文为博主原创文章,未经博主同意不得转载.安金龙 的博客. https://blog.csdn.net/smile0198/article/details/37573081 1.从HDFS中 ...

  3. python 遍历搜索 目录下所有文件

    python 遍历搜索 目录下所有文件 import osdef search_dir_all_files(input_dir):files_list=[]for root, dirs, files ...

  4. jq监听input type=file发生改变,即选择文件,并获取文件名称

    jq监听input type="file"发生改变,即选择文件,并获取文件名称 <input id="fileupload" name="fil ...

  5. html 获取文本框中的内容

    获取文本框中的内容有以下两种方法: 假设为如下文本框: <input type="text" value="" id="text"&g ...

  6. 获取textedit框中的内容

    获取textedit框中的内容 QString talkMsg = this->ui->textEditSend->document()->toPlainText();

  7. c语言搜索多层文件夹,c语言 遍历搜索文件夹(获取文件夹中所有内容)

    需要用来存储文件各种信息的结构体:struct_finddata_t 及查找函数:_findfirst._findnext和_fineclose. [1] _finddata_t结构体 struct ...

  8. linux目录为root所有文件,linux获取文件所有目录/文件夹的例子linux操作系统 -电脑资料...

    下面我给大家整理了两种比较实用的方法,如我们可以使用dirname来获取文件路径或者使用shell命令来获取路径,希望例子对大家有帮助, 方式一:使用" dirname" 去获得( ...

  9. PyQt5 技术篇-调用文件对话框获取文件、文件夹路径。文件对话框返回选中的多个文件路径

    下面是常用的4个文件对话框动作: QFileDialog.getExistingDirectory() # 返回选中的文件夹路径 QFileDialog.getOpenFileName() # 返回选 ...

  10. python3 获取file大小_Go语言 | 你还在这样获取文件的大小吗?

    在项目中,我们可能会需要获取一个文件的大小,在Golang(Go语言)中,有很多方法来获取一个文件的大小,看看你是否还在用最慢的方式. Read字节方式 第一种,是最直观会想到的,也就是打开文件,把文 ...

最新文章

  1. cve-2015-0569 安卓手机提权ROOT漏洞 分析
  2. global mapper 制作地形图_福州大飞机模型制作厂家,产品模型,期待合作_境海模型...
  3. Linux蜂鸣器实验(使用上一节子系统思想,摈弃了自己配置寄存器的繁琐操作)
  4. python的N个小功能(更新文件)
  5. OpenGL基础50:HDR
  6. 学技术不可盲目崇洋媚外,时刻记得要自主创新,勿忘国耻
  7. STC51入门笔记(郭天祥C语言)---第十一节:使用DS12C887时钟芯片设计高精度时钟
  8. android 互传文件,堪比隔空投送!iPhone和安卓、PC互传文件的3种方法,建议收藏...
  9. 浙江大学计算机考研分数线2018,2018年浙江大学考研复试分数线已公布
  10. Intel VT学习笔记(一)—— 基础知识支持检测
  11. 计算机音乐超级马丽,你与你的音乐梦想,只差一台数学计算器
  12. php版本微信公众号开发
  13. Springboot搭建文件服务器
  14. 【JavaScript编程】window.location.search 返回值为空
  15. 这段代码,c 1秒,java 9秒,c# 14秒,而python。。。
  16. JS常用代码片段-127个常用罗列-值得收藏
  17. PS5上传图片失败,游戏无法推送更新,提示服务器出了点问题,HTTP状态码:403
  18. 入离职管理系统——类的抽取和注册登录功能
  19. 用vb.net开发的简易(通用)上位机
  20. 2021年中国集成灶行业现状及其重点企业对比分析:浙江美大VS火星人VS亿田智能VS帅丰电器[图]

热门文章

  1. 墙裂推荐--几个Jupyter Notebook 超实用插件(一)
  2. 镭速联合Azure Blob 存储,重塑大文件传输平台存储架构
  3. 研究生如何进行文献的搜索和参考文献信息的搜寻
  4. 用计算机技术辅助语文教学,计算机技术相关毕业论文致谢,关于计算机辅助语文教学相关论文范文文献...
  5. 哪五种人不适合学编程?
  6. burp安装及代理设置
  7. P1903 数颜色 (带修莫队)
  8. DenseBox 论文笔记
  9. 防雷接地系统中的浪涌保护器分类选型
  10. 五种主流音频无损压缩格式简介