功能是显示目录下的所有文件和文件夹。
先介绍几个结构体和函数;
1、struct _find_data_t
{
unsigned int attrib;
time_t time_create; //创建时间
time_t time_acess; //最后一次访问时间
time_t time_write; //最后一次修改时间
_fsize_t size; //文件大小,_fsize_t 相当于 unsigned int
char name[_MAX_FNAME];
};
attrib: 文件的属性:主要有以下这些 :
_A_ARCH_(存档)
_A_HIDDEN(隐藏)
_A_NOMAL(正常)
_A_RDONLY(只读)
_A_SUBDIR(文件夹)
_A_SYSTEM(系统)
2、_findfirst()函数
原型:long _findfirst(char *filespec, struct _find_data_t *fileinfo);
返回值:如果查找成功,则查找用的唯一句柄,若失败, 则返回-1;
参数值 :
filespec: 表明文件的字符串,可以支持通配符
fileinfo: 用来存放文件的信息;
3、_findnext()函数
原型:int _findnext(long handle, struct _file_data_t * fileinfo);
返回值:成功返回 0 ,否则返回 -1;
参数: handle:上一步得到的句柄 ;
fileinfo : 用来存放查到的文件信息;
4、_finfclose()函数
原型:int _findclose(long handle);
返回值 :成功返回0;否则返回 -1;
参数 ; handle:_findfirst()返回的函数句柄
#include <stdio.h> #include <stdlib.h> #include <io.h> #include <string> #include <iostream> using namespace std; void fileSearch(string path) { struct _finddata_t file; long fileHandle; string curPath = path + "\\*.*"; if ((fileHandle = _findfirst(curPath.c_str(), &file)) == -1) { return; } do { if (strcmp(file.name, "..")!=0 && strcmp(file.name, ".")!=0) { if (_A_SUBDIR == file.attrib) { curPath = path + "\\" + file.name; fileSearch(curPath); } else { printf("%s\n", file.name); } } } while (!(_findnext(fileHandle, &file))); _findclose(fileHandle); } int main(int argc, const char *argv[]) { string path = "c:\\KDMVideo\\20120421"; fileSearch(path); return 0; }