C/C++遍历文件和目录

来源:互联网 发布:js转换日期格式 编辑:程序博客网 时间:2024/05/21 18:42

C/C++遍历文件夹要用到_finddata_t结构体,函数_findfirst、_findnext和_fineclose,它们都定义在头文件<io.h>中,下面介绍具体如何使用.
结构体_finddata_t是用来存储文件各种信息的,其中成员变量分别为
Unsigned atrrib:文件属性的存储位置,它存储一个unsigned单元,用于表示文件的属性。文件属性是用位表示的,主要有以下一些:_A_ARCH(存档)、_A_HIDDEN(隐 藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、_A_SUBDIR(文件夹)、_A_SYSTEM(系统)。这些都是 在<io.h>中定义的宏,可以直接使用,而本身的意义其实是一个无符号整型(只不过这个整型应该是2的几次幂,从而保证只有一位为1,而其 他位为0)。既然是位表示,那么当一个文件有多个属性时,它往往是通过位或的方式,来得到几个属性的综合。例如只读+隐藏+系统属性,应该 为:_A_HIDDEN| _A_RDONLY |_A_SYSTEM 。
time_t time_create:存储文件创建的时间。
time_t time_access:存储文件最后一次被访问的时间。
time_t time_write:存储文件最后一次被修改的时间。
_fsize_t size:存储文件的大小。
char name[_MAX_FNAME]:存储文件的文件名。

_findfirst(char*filespec,struct_finddata_t*fileinfo);
返回值:如果查找成功的话,将返回一个唯一查找用的句柄,这个句柄在_findnext函数中 被使用,若失败,将返回1;
filespec:文件的路径(字符串?)

char *filename = "F:\\slice_bw\\*.png";    struct _finddata_t fileinfo;    long handle;    handle = _findfirst(filename, &fileinfo);

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

_findnext(long handle,struct_findata_t*fileinfo);
handle:即由_findfirst函数返回回来的句柄。
fileinfo:文件信息结构体的指针,找到文件后,函数将该文件信息放入此结构体中。

while (!_findnext(handle, &fileinfo))

int _findclose( long handle );
返回值:成功返回0,失败返回-1。
参数:
handle :_findfirst函数返回回来的句柄。

_findclose(handle);

先用_findfirst查找第一个文件,若成功则用返回的句柄调用_findnext函数查找其他的 文件,当查找完毕后用,用_findclose函数结束查找。

#include<iostream>  #include<io.h>  using namespace std;  void main()  {     char *filename = "(path) *.*(文件格式)";     struct _finddata_t fileinfo;//定义文件信息的结构体指针     long handle;  //定义句柄   handle = _findfirst(filename,&fileinfo);     if(handle == -1) cout<<"fail..."<<endl;     else      cout<<fileinfo.name<<endl;     while(!_findnext(handle,&fileinfo))     {      cout<<fileinfo.name<<endl;     }     _findclose(handle);     system("pause");  }  

Qt中的遍历方法:

path=QFileDialog::getExistingDirectory(NULL, tr("选择文件夹"),"D:\\",QFileDialog::ShowDirsOnly);QDir *dir=new QDir(path);QStringList filter;//filter<<"*.dat";//dir->setNameFilters(filter);QList<QFileInfo> *fileInfo=new QList<QFileInfo>(dir->entryInfoList(filter));

注释掉的两行是用来文件过滤用的,如果你要指定文件后缀名在 filter<<”*.dat” 写就好了

文件数目:fileInfo->count();

文件名称:fileInfo->at(i).fileName();

文件路径(包含文件名):fileInfo->at(i).filePath();

也可参考:

http://blog.csdn.net/abcjennifer/article/details/18147551

原创粉丝点击