您的位置:首页 > 编程语言 > C语言/C++

C++遍历文件夹下的所有文件

2016-11-03 15:08 513 查看

C++遍历文件夹下的所有文件

本人邮箱:sylvester0510@163.com,欢迎交流讨论,

欢迎转载,转载请注明网址http://blog.csdn.net/u010128736/

一.使用_finddata_t

  为了查找文件,我们使用

struct _finddata_t
{
unsigned attrib;     //文件属性
time_t time_create;  //文件创建时间
time_t time_access;  //文件上一次访问时间
time_t time_write;   //文件上一次修改时间
_fsize_t size;  //文件字节数
char name[_MAX_FNAME]; //文件名
};


(1)unsigned atrrib:

  文件属性。文件属性是用位表示的,主要有以下一些:_A_ARCH(存档)、_A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、_A_SUBDIR(文件夹)、_A_SYSTEM(系统)。这些都是在

(2)time_t time_create:

  这里的time_t是一个变量类型,用来存储文件创建时间的就可以了。

(3)time_t time_access:

  文件最后一次被访问的时间。

(4)time_t time_write:

  文件最后一次被修改的时间。

(5)_fsize_t size:

  文件的大小。这里的_fsize_t应该可以相当于unsigned整型,表示文件的字节数。

(6)char name[_MAX_FNAME]:

  文件的文件名。这里的_MAX_FNAME是一个常量宏,它在

二、_finddata_t的三个函数:

(1)_findfirst

//按FileName命名规则匹配当前目录第一个文件
_findfirst(_In_ const char * FileName, _Out_ struct _finddata64i32_t * _FindData);


  _findfirst函数返回的是匹配到文件的句柄,很多文档将这个句柄的数据类型定为long,但有时会在_findnext的时候报错,如下图所示,就要将long类型改为intptr_t类型。遍历过程可以指定文件类型,这通过FileName的赋值来实现。



(2)_findnext

//按FileName命名规则匹配当前目录下一个文件
_findnext(_In_ intptr_t _FindHandle, _Out_ struct _finddata64i32_t * _FindData);


(3)_findclose

//关闭_findfirst返回的文件句柄
_findclose(_In_ intptr_t _FindHandle);


三、示例代码

#include <io.h>

void getFiles(string path, vector<string>& files)
{
//文件句柄
intptr_t hFile = 0;
//文件信息
struct _finddata_t fileinfo;
string p;
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
{
do
{
//如果是目录,迭代之
//如果不是,加入列表
if ((fileinfo.attrib &  _A_SUBDIR))
{
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
getFiles(p.assign(path).append("\\").append(fileinfo.name), files);
}
else
{
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
}
} while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}

int main(int argc, char** argv)
{
string filePath = ".\\720PPcalib\\front";
vector<string> files;

////获取该路径下的所有文件
getFiles(filePath, files);

char str[30];
int size = files.size();
for (int i = 0; i < size; i++)
{
cout << files[i].c_str() << endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++