本文主要介绍C使用_findfirst和_findnext查找文件的相关信息。通过示例代码进行了非常详细的介绍,对大家的学习或工作有一定的参考价值。下面让我们跟随边肖一起学习。
C++ 文件查找
我们如何在C中找到文件?我们需要一个结构和几个你可能不熟悉的功能。这些函数和结构位于的头文件中,结构为struct _finddata_t,函数为_findfirst、_findnext和_fineclose。具体怎么用,一起来看看吧。
_findfirst与_findnext查找文件
第一,这两个函数都在io.h里
二、首先了解一下一个文件结构体:
struct _finddata_t {
无符号属性;
time _ t time _ create
time _ t time _ access
time _ t time _ write
_ fsize _ t size
char name[260];
};
Time_t其实是一个long。
而_fsize_t是无符号长整型。
现在让我们解释一下该结构的数据成员。
Attrib是被搜索文件的属性:_A_ARCH(存档)、_A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、_A_SUBDIR(文件夹)和_A_SYSTEM(系统)。
Time_create、time_access和time_write分别是创建文件的时间、最后一次访问文件的时间和最后一次修改文件的时间。
大小:文件大小
名称:文件名。
三、用 _findfirst 和 _findnext 查找文件
1._findfirst函数:long _ findfirst (constchar *,struct _ find data _ t *);
第一个参数是文件名。可以用' * '。* '查找所有文件或' *。要找的cpp。cpp文件。第二个参数是_finddata_t结构指针。如果搜索成功,返回文件句柄;如果失败,返回-1。
2._findnext函数:int _ findnext (long,struct _ find data _ t *);
第一个参数是文件句柄,第二个参数也是指向_finddata_t结构的指针。如果搜索成功,返回0,如果搜索失败,返回-1。
3._findclose()函数:int _ findclose(long);
只有一个参数,文件句柄。如果关闭成功返回0,失败返回-1。
#包含io.h
#包括iostream
#包括fstream
使用命名空间std
bool transfer(string fileName,int exeNum);
void dfsFolder(string folderPath,of stream fout);
int main()
{
_finddata_t文件;
int k;
长柄;
k=HANDLE=_findfirst('*。*,文件);
而(k!=-1)
{
cout file.name endl
k=_findnext(句柄,文件);
}
_ find close(HANDLE);
传输(' C:\\Windows\\*。exe ',0);
ofstream o _ fstream
DFS folder(' E:\ \ \ WHU \ \研究',o _ fstream);
返回0;
}
//_findfirst函数返回匹配文件的句柄,数据类型为long。
//遍历过程可以指定文件类型,比如通过赋值FileName来实现,遍历所有。C: \WINDOWS下的exe文件。
布尔传输(字符串文件名,int exeNum)
{
_ finddata _ t fileInfo
long handle=_ findfirst(filename . c _ str(),fileInfo);
如果(句柄==-1L)
{
“cerr”无法传输文件“endl
返回false
}
做
{
exeNum
cout fileInfo.name endl
} while (_findnext(handle,fileInfo)==0);
cout。' exe文件的编号:' exeNum endl
返回true
}
//遍历文件夹及其子文件夹下的所有文件。操作系统中的文件夹目录是树形结构,深度搜索策略遍历所有文件。使用_A_SUBDIR属性。
//在确定是否有子目录的if分支中,当系统进入一个子目录时,匹配到的前两个文件(文件夹)是“.”(当前目录),' .'(以前的目录)。
//这两种情况需要忽略。当需要处理被遍历的文件时,只需在else分支中添加相应的代码即可。
void dfsFolder(字符串文件夹路径,ofstream fout)
{
_ finddata _ t FileInfo
string strfind=folderPath ' \ \ *
long Handle=_ findfirst(strfind . c _ str(),FileInfo);
如果(句柄==-1L)
{
“cerr”无法匹配文件夹路径“endl
退出(-1);
}
做{
//确定是否有子目录
if (FileInfo.attrib _A_SUBDIR)
{
//这个声明非常重要
if ((strcmp(FileInfo.name,' . ')) !=0) (strcmp(FileInfo.name,'.') !=0))
{
string new path=folderPath ' \ ' fileinfo。姓名;
dfsFolder(newPath,fout);
}
}
其他
{
foutfolderpath。c _ str()' \ ' fileinfo。姓名';
cout文件夹路径。c _ str()' \ ' fileinfo。名字endl
}
} while (_findnext(Handle,FileInfo)==0);
_查找关闭(句柄);
fout。close();
}
//#包含输入输出流
//#包含字符串
//#包含io.h
//使用命名空间标准
//
//int main()
//{
//_finddata_t文件;
//long longf;
//字符串临时名称
//////_ findfirst返回的是长的型;long _ _ cdecl _ findfirst(const char *,struct _finddata_t *)
//if((longf=_ findfirst(' E:\ \ WHU \ \ Study \ \ * .*,file))==-1l)
//{
//cout '文件没有找到!\ n ';
//返回0;
//}
//do
//{
//cout '文件列表:\ n ';
//tempName=file。姓名;
//if (tempName[0]==' . ')
//继续;
//cout文件。nameendl
//
//if (file.attrib==_A_NORMAL)
//{
//cout '普通文件;
//}
//else if(文件。仅attrib==_ A _ rd)
//{
//cout '只读文件;
//}
//else if(文件。attrib==_ A _ HIDDEN)
//{
//cout '隐藏文件;
//}
//else if(文件。属性==_ A _系统)
//{
//cout '系统文件;
//}
//else if(文件。attrib==_ A _ SUBDIR)
//{
//cout '子目录;
//}
//否则
//{
//cout '存档文件;
//}
//cout endl;
//} while (_findnext(longf,file)==0);//int __cdecl _findnext(long,struct _ find data _ t *);如果找到下个文件的名字成功的话就返回0,否则返回-1
//
//_ findclose(longf);
//
//返回0;
//}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。