c语言 遍历搜索文件夹(获取文件夹中所有内容)
需要用来存储文件各种信息的结构体: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语言 遍历搜索文件夹(获取文件夹中所有内容)相关推荐
- java读取hdfs文件夹_HDFS 读取、写入、遍历文件夹获取文件全路径、append
1.从HDFS中读取数据 Configuration conf = getConf(); Path path = new Path(pathstr); FileSystem fs = FileSyst ...
- HDFS 读取、写入、遍历文件夹获取文件全路径、append
版权声明:本文为博主原创文章,未经博主同意不得转载.安金龙 的博客. https://blog.csdn.net/smile0198/article/details/37573081 1.从HDFS中 ...
- python 遍历搜索 目录下所有文件
python 遍历搜索 目录下所有文件 import osdef search_dir_all_files(input_dir):files_list=[]for root, dirs, files ...
- jq监听input type=file发生改变,即选择文件,并获取文件名称
jq监听input type="file"发生改变,即选择文件,并获取文件名称 <input id="fileupload" name="fil ...
- html 获取文本框中的内容
获取文本框中的内容有以下两种方法: 假设为如下文本框: <input type="text" value="" id="text"&g ...
- 获取textedit框中的内容
获取textedit框中的内容 QString talkMsg = this->ui->textEditSend->document()->toPlainText();
- c语言搜索多层文件夹,c语言 遍历搜索文件夹(获取文件夹中所有内容)
需要用来存储文件各种信息的结构体:struct_finddata_t 及查找函数:_findfirst._findnext和_fineclose. [1] _finddata_t结构体 struct ...
- linux目录为root所有文件,linux获取文件所有目录/文件夹的例子linux操作系统 -电脑资料...
下面我给大家整理了两种比较实用的方法,如我们可以使用dirname来获取文件路径或者使用shell命令来获取路径,希望例子对大家有帮助, 方式一:使用" dirname" 去获得( ...
- PyQt5 技术篇-调用文件对话框获取文件、文件夹路径。文件对话框返回选中的多个文件路径
下面是常用的4个文件对话框动作: QFileDialog.getExistingDirectory() # 返回选中的文件夹路径 QFileDialog.getOpenFileName() # 返回选 ...
- python3 获取file大小_Go语言 | 你还在这样获取文件的大小吗?
在项目中,我们可能会需要获取一个文件的大小,在Golang(Go语言)中,有很多方法来获取一个文件的大小,看看你是否还在用最慢的方式. Read字节方式 第一种,是最直观会想到的,也就是打开文件,把文 ...
最新文章
- cve-2015-0569 安卓手机提权ROOT漏洞 分析
- global mapper 制作地形图_福州大飞机模型制作厂家,产品模型,期待合作_境海模型...
- Linux蜂鸣器实验(使用上一节子系统思想,摈弃了自己配置寄存器的繁琐操作)
- python的N个小功能(更新文件)
- OpenGL基础50:HDR
- 学技术不可盲目崇洋媚外,时刻记得要自主创新,勿忘国耻
- STC51入门笔记(郭天祥C语言)---第十一节:使用DS12C887时钟芯片设计高精度时钟
- android 互传文件,堪比隔空投送!iPhone和安卓、PC互传文件的3种方法,建议收藏...
- 浙江大学计算机考研分数线2018,2018年浙江大学考研复试分数线已公布
- Intel VT学习笔记(一)—— 基础知识支持检测
- 计算机音乐超级马丽,你与你的音乐梦想,只差一台数学计算器
- php版本微信公众号开发
- Springboot搭建文件服务器
- 【JavaScript编程】window.location.search 返回值为空
- 这段代码,c 1秒,java 9秒,c# 14秒,而python。。。
- JS常用代码片段-127个常用罗列-值得收藏
- PS5上传图片失败,游戏无法推送更新,提示服务器出了点问题,HTTP状态码:403
- 入离职管理系统——类的抽取和注册登录功能
- 用vb.net开发的简易(通用)上位机
- 2021年中国集成灶行业现状及其重点企业对比分析:浙江美大VS火星人VS亿田智能VS帅丰电器[图]