首先我们来看一个例子:
#include#include //使用windows的api.#include #include #include int main(){ std::string dir("F:\\*.mp4"); //指定文件夹. long handle; struct _finddata_t fileinfo; handle = _findfirst(dir.c_str(), &fileinfo); if(handle == -1){ std::cout<< "There is nothing in this dir" <
上面的例子:我们能够读取F盘目录下面的所有格式为mp4的文件.
其中需要注意的头文件 #include<io.h>, 以及3个函数:
_findfirst(const char* dir, struct _find_data_t* fileinfo);
_findnext(long, struct _find_data_t* fileinfo);
_findclose(long);
上面的三个函数中的 long 没什么好说的了,我们着重说一下struct _find_data_t:
struct _find_data_t{
unsigned attribute; //保存该文件的属性.
time_t time_create; //保存该文件被创建的时间.
time_t time_access; //保存该文件最后一次被访问的时间.
time_t time_write; //保存文件最后一次被修改的时间.
long size; //保存文件的尺寸.
char file_name[MAX_SIZE]; //保存文件的名字.
};
unsigned attribute; 保存文件的属性,文件的属性是用位表示的主要有这些:
_A_ARCH(文档), _A_HIDEN(隐藏), _A_NORMAL(正常), _A_RDONLY(只读), _A_SUBDIR(文件夹), _A_SYSTEM(系统). 这些都是定义在 #include <io.h>中的可以被直接使用,本身的意义是一个无符号的整数类型(只不过这些整数类型都是 2 的几次幂,也可以理解为该属性是用 二进制表示的). 因此当一个文件有多重属性的时候我们就可以 通过 位与(&), 位或(|), 异或(^)来操作该文件的属性。比如最常用的: 只读+隐藏+系统属性,应该为:_A_HIDDEN | _A_RDONLY | _A_SYSTEM 。
time_t :是定义在头文件#include <ctime> 或者 #include<time.h> 的用于表示一个时间点的量.
long _findfirst(const char* dir, struct _find_data_t* fileinfo)
返回值: 该函数如果成功在指定的目录下 dir, 找到我们需要的文件将返回一个 long 的唯一的用于查找的句柄,该句柄被用于 _findnext()中,如果失败则返回: -1.
参数:
const char* 可以接受通配符, 比如我们上面写的 " *.mp4 ",指的是当前目录下所有的mp4文件, 比如" * "指的是当前目录下所有的文件对象.
fileinfo: 用来存放找到的文件的信息的结构体的指针.
int _findnext(long handle, struct _find_data_t* fileinfo)
返回值: 如果读取成功返回0, 失败返回1.
参数:
handle,接受由 _findfirst()返回的句柄。
fileinfo, 文件信息的指针.
int _findclose(long handle)
关闭当该文件夹内容的读取,如果成功返回0, 失败返回-1。