,,C++利用 _findfirst与_findnext查找文件的方法

,,C++利用 _findfirst与_findnext查找文件的方法

本文主要介绍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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: