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
- [Linux]C语言遍历文件和目录
- [Linux]C语言遍历文件和目录
- C语言遍历文件和目录
- C/C++遍历文件和目录
- C语言遍历文件和目录
- C/C++遍历文件和目录
- C/C++:遍历目录
- 采用标准c进行目录文件遍历
- 采用标准C进行目录文件遍历
- C++, Python, Matlab, Bash 文件目录遍历
- centos中c遍历目录文件例子
- [C/C++]遍历目录下指定(任意)文件
- C语言遍历目录
- C语言遍历目录
- C语言遍历目录
- Object-C,遍历目录
- C/C++遍历目录下的文件或指定文件
- C/C++遍历目录下的文件或指定文件
- java每日一练
- @RestController的使用
- 浅谈游戏开发之2D手游工具
- poj 2226
- 如何判断单链表是否有环?
- C/C++遍历文件和目录
- myeclipse使用技巧
- In Linux, Everything is a File
- linux ln 命令
- 从尾到头打印链表(三指针法)
- 用AppVerifier查找堆破坏
- IAR编译CC2640常见错误及解决方法
- InnoDB行锁的实现方式
- MySQL之innodb_flush_log_at_trx_commit和sync_binlog参数详解