**一、查找指定的文件
1、了解系统结构体和系统函数**
结构体为 struct _finddata_t,函数为:_findfirst、findnext和 _findclose。
结构体struct
finddata
struct _finddata_t
{
unsigned attrib;//文件属性 _A_ARCH(存档)、_A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只 读)、_A_SUBDIR(文件夹)、_A_SYSTEM(系统)
time_t time_create;//文件创建时间
time_t time_access;//文件最后一次被访问的时间。
time_t time_write;//文件最后一次被修改的时间
_fsize_t size;//文件的大小
char name[_MAX_FNAME];
};
函数:_findfirst、findnext和 _findclose
一、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函数返回回来的句柄。
2、例子
头文件为:stdio.h、io.h
const char
to_search=”C:\WINDOWS\
.txt”; //欲查找的文件,支持通配符
int main()
{
long handle; //用于查找的句柄
struct _finddata_t fileinfo; //文件信息的结构体
handle=_findfirst(to_search,&fileinfo); //第一次查找
if(-1==handle)
return -1;
printf(“%s\n”,fileinfo.name);
while(!_findnext(handle,&fileinfo)) //循环查找其他符合的文件,知道找不到其他的为止
{
printf(“%s\n”,fileinfo.name);
}
_findclose(handle);
system("pause");
return 0;
二、查找指定的文件夹
1、了解系统结构体和系统函数
结构体为 struct WIN32_FIND_DATAA,函数为:FindFirstFile、FindNextFile和 FindClose。
结构体 WIN32_FIND_DATAA_
其中文件属性为
现在针对 GetFileAttributes 函数的返回值做以下整理
返回字段 返回值 属性类型
宏值 数值 代表意思
FILE_ATTRIBUTE_READONLY 1 只读
FILE_ATTRIBUTE_HIDDEN 2 隐藏
FILE_ATTRIBUTE_SYSTEM 4 系统
FILE_ATTRIBUTE_DIRECTORY 16 目录
FILE_ATTRIBUTE_ARCHIVE 32 存档
FILE_ATTRIBUTE_DEVICE 64 保留
FILE_ATTRIBUTE_NORMAL 128 正常
FILE_ATTRIBUTE_TEMPORARY 256 临时
FILE_ATTRIBUTE_SPARSE_FILE 512 稀疏文件
FILE_ATTRIBUTE_REPARSE_POINT 1024 超链接或快捷方式
FILE_ATTRIBUTE_COMPRESSED 2048 压缩
FILE_ATTRIBUTE_OFFLINE 4096 脱机
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 8192 索引
FILE_ATTRIBUTE_ENCRYPTED 16384 加密
FILE_ATTRIBUTE_VIRTUAL 65536 虚拟
头文件为:iostream、string、windows.h
int find_path(const char *);
char save_path[MAX_PATH]={ 0 };//结果输出路径;
char szPath[MAX_PATH]={ 0 };
char result[MAX_PATH]={ 0 };
FILE* pf_path_file;int find_path(const char *);
int find_path_save_file(const char* lp_path, const char* out_file_name)
{
pf_path_file = fopen(out_file_name, “w”);
int cnt = find_path(lp_path);
fclose(pf_path_file);
return cnt;
}
void str_tok(char *str) //分离文件目录
{
char *p=NULL;
char delims[]=”\”;
p=strtok(str, delims );
while(p!=NULL)
{
strcpy(result,p);
p=strtok(NULL,delims );
};
}
void str_extension(char *str) //分离文件扩展名;
{
char *p=NULL;
char delims[]=”.”;
p=strtok(str, delims );
while(p!=NULL)
{
strcpy(result,p);
p=strtok(NULL,delims );
};
}
int find_path(const char* lp_path)// 遍历搜索目录
{
static int cnt = 0;
HANDLE hFile;
WIN32_FIND_DATAA wfd; //数据结构;
char sz_path[MAX_PATH] = { 0 };
char buf[MAX_PATH * 2] = { 0 };
char fileName[MAX_PATH]= { 0 };
char temp[MAX_PATH]={ 0 };//临时数组;
char parseFileName[MAX_PATH]={ 0 };
strcpy(sz_path, lp_path);
strcat(sz_path, "\\*.*"); //匹配任何文件包括文件夹目录;
hFile = FindFirstFile(sz_path, &wfd);
if (hFile != INVALID_HANDLE_VALUE)
if(wfd.cFileName[0] == '.') //如果是.或..则过滤;
continue;
else if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //如果是目录则递归;
strcpy(sz_path, lp_path);
strcat(sz_path,"\\");
if (!strcmp(wfd.cFileName,"test1"))
fprintf(pf_path_file, "%s:%s\n",lp_path,wfd.cFileName);
if (!strcmp(wfd.cFileName,"test2"))
fprintf(pf_path_file, "%s:%s\n",lp_path,wfd.cFileName);
strcat(sz_path, wfd.cFileName); //拼接目录全路径名;
find_path(sz_path); //调用递归;
}while(FindNextFile(hFile, &wfd));
return cnt;
int _tmain(int argc, _TCHAR* argv[])
{
GetCurrentDirectory(MAX_PATH, szPath); //当前目录
strcpy(save_path,szPath);//结果result.txt放在当前目录中;
strcat(save_path,"\\result.txt");
find_path_save_file("C:\\Users\\Administrator",save_path);
system("pause");
return 0;
**一、查找指定的文件 1、了解系统结构体和系统函数** 结构体为 struct _finddata_t,函数为:_findfirst、findnext和 _findclose。 结构体struct finddata struct _finddata_t { unsigned attrib;//文件属性 _A_ARCH(存档)、_A_H...
C++中读取文件可以采用几个函数分别为,_findfirst、_findnext、_findclose。其中还要借助结构体 struct _finddata_t,_finddata_t主要用来存储各种文件的信息。struct _finddata64i32_t {
unsigned attrib;
__time64_t time_create; /* -...
使用boost C++ windows遍历文件夹(包含子目录)
参考链接 https://www.cnblogs.com/hellowooorld/p/11382812.html
配合FindFirstFile、FindNextFile搜索文件夹(包含子目录)符合搜索条件的文件
提示:以下是本篇文章正文内容,下面案例可供参考
一、功能代码
#ifndef __GHOS_FIL
/*******************************************************************************
*@ Description :搜索指定目录下的所有文件及其子目录下的文件
*@ Input :
*@ Output :
*@ Return :
*@ attention :
*****************************************************.
方法一、利用WIN32的FindFirstFile与FindNextFile
FindFirstFile函数是查找到目录下的第一个文件或目录,FindNextFile函数是查找下一文件或目录。
根据文件名查找文件。该函数到一个文件夹(包括子文件夹)去搜索指定文件 如果要使用附加属性去搜索文件的话 可以使用FindFirstFileEx函数。
HANDLE FindFirstFile(
BROWSEINFO bi; //定义BROWSEINFO结构体
char buffer[MAX_PATH];
ZeroMemory(buffer,MAX_PATH);
bi.hwndOwner=GetSafeHwnd();
bi.pidlRoot=NULL;
bi.pszDisplayName=buffer;
bi.lpszTitle="选择一个文件夹";
bi.ulFlags=.
这里写自定义目录标题C++获取文件夹下多个特定类型文件的文件名1.C++获取文件夹下所有文件的路径功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入
C++获取文件夹下多个特定类型文件的文件名
你好! 这是你第一次使用 Markdow
这几天在弄一个项目,需要读取给定路径下的所有文件夹名称或所有带后缀的文件名。查了下C++的资料,发现有很多方法,这里总结其中的一种,其他用法类似。主要用到了以下几个头文件(类):io.h,fstream,string。
1、读取某给定路径下所有文件夹与文件名称,并带完整路径。代码如下:
1 void getAllFiles(string path, vector& files) {
2 ...
如果在文章中发现代码错误或其它问题请告知,感谢!
2.实现方法
为了使用C语言实现查看一个文件夹中的文件数量功能,可以使用dirent库,该库文件包含的许多UNIX系统服务的函数原型,例如opendir函数、readdir函数,可以实现查看目录中文件数量等功能。
2.1dirent中常用数据类型以及函数功能简介
下面对dirent中常用的数据类型以及函数进行简单的解释:
常用结构体:
DIR结构体:
struct __dirstrea
采用C++ 编写,只有一个函数。
第一个参数为必填的输入参数,填入待查找的文件夹路径
第二个参数为输出参数,输出匹配到的文件信息(包括文件名,文件路径,和一个对应WIN32_FIND_DATA结构)
地三个参数为可选的输入参数,输入扩展名信息,扩展名格式为(.cpp, *.cpp, cpp)三者都可,大小写不区分,如果为空则输出目录下的所以文件,默认是输出所有文件
第四个参数为可选的输入参数,表明是否递归,如果为TRUE则递归子文件夹查找,如果为FALSE则不递归,默认是递归查找
BOOL FindFile(const WCHAR *szFolderPath, map<wstring, pair> &mapFile, const WCHAR *szExtendName = NULL, BOOL bRecursion = TRUE);
struct dirent *ent;
if ((dir = opendir(".")) != NULL) {
while ((ent = readdir(dir)) != NULL) {
printf("%s\n", ent->d_name);
closedir(dir);
} else {
perror("");
return 1;
return 0;
这段代码可以遍历当前文件夹中的所有文件和文件夹,并将它们的名称打印出来。