参考:添加链接描述
参考:添加链接描述
Windows/Linux的IDE都会提供一个头文件——,提供了类似WIN32_FIND_DATA、FindFirstFile()、FindNextFile()和FindClose()的查找文件的功能。
_finddata_t结构
_finddata_t结构用来记录查找到的文件的信息。实际上有_finddata32_t、_finddata32i64_t、_finddata64i32_t、_finddata64_t、_wfinddata32_t、_wfinddata32i64_t、_wfinddata64i32_t、_wfinddata64_t八个结构,但都只是在32位/64位整数和字符类型上有所区别,但整体上相同。大致定义如下:
struct _finddata_t
{
unsigned attrib;
size_t time_create;
size_t time_access;
size_t time_write;
_fsize_t size;
char name[_MAX_PATH];
};
attrib
unsigned类型,文件属性。
文件属性常量:
_A_ARCH
档案。文件被BACKUP指令改变或清除时被设置。值:0x20
_A_HIDDEN
隐藏。使用DIR指令一般看不到,除非使用/AH选项。值:0x02
_A_NORMAL
普通。文件没有更多属性被设置,可以没有限制地被读或写。值:0x00
_A_RDONLY
只读。不能以“写”为目的打开该文件,并且不能创建同名的文件。值:0x01
_A_SYSTEM
系统文件。使用DIR指令一般看不见,除非使用/A或/A:S选项。值:0x04
_A_SUBDIR
子目录。值:0x10
time_create
_time32_t/_time64_t类型,文件创建时间(FAT文件系统为-1)。以UTC格式存储,如果需要转换成当地时间,使用localtime_s()。
time_access
_time32_t/_time64_t类型,文件最后一次被访问的时间(FAT文件系统为-1)。以UTC格式存储,如果需要转换成当地时间,使用localtime_s()。
_time_write
_time32_t/_time64_t类型,文件最后一次被写入的时间。以UTC格式存储,如果需要转换成当地时间,使用localtime_s()。
size
_fsize_t/__int64类型,文件的长度(以字节为单位)。
name
char[_MAX_PATH]/wchar_t[_MAX_PATH]类型,文件/目录名,不包含路径。
对于不支持文件创建时间、文件上一次访问时间的文件系统,time_create和time_access为-1。
_MAX_PATH在stdlib.h中被定义为260。
通配符(wildcards)
*和?字符被用作通配符。
指定全部具有某个扩展名的文件
指定所有.txt文件:"*.txt"
指定全部具有某个名称的文件/目录
指定所有名为readme(格式不限)的文件和目录:“readme.*”
指定具有一定长度的扩展名的文件
指定所有扩展名为4个字符,名为index的文件:“index.???”
指定具有一定长度的文件名的文件
指定所有扩展名为.txt,名字含有7个字符的文件:"???.txt"
_findfirst()/_findnext()/_findclose()函数
_findfirst()函数
intptr_t _findfirst(
const char * filespec,
struct _finddata_t *fileinfo
);
filespec
const char */const wchar_t *类型,目标文件说明(可包含通配符)。
fileinfo
_finddata_t *类型,函数将会填入文件/目录信息。
返回值
如果成功,返回一个唯一的搜索句柄标识一个或一组和filespec说明匹配的文件,可以用于接下来的_findnext()和_findclose()函数。否则_findfirst()返回-1。注意,intptr_t并不是指针类型,只是int或__int64的typedef。
_findnext()函数
int _findnext(
intptr_t handle,
struct _finddata_t *fileinfo
);
handle
intptr_t类型,搜索句柄。
fileinfo
_finddata_t *类型,函数将会填入文件/目录信息。
返回值
如果成功,返回0,否则返回-1。如果没有更多能够找到的文件了,也会导致失败。
_findclose()函数
int _findclose(
intptr_t handle
);
关闭搜索句柄并释放相应的资源。
handle
搜索句柄。
返回值
成功返回0,失败返回-1。
localtime_s()
localtime_s用来获取系统时间,运行于windows平台下
(localtime_r运行于linux平台下)
#include #include int main()
{
time_t time_seconds = time(0);
struct tm now_time;
localtime_s(&now_time,&time_seconds);
printf("%d-%d-%d %d:%d:%d\n", now_time.tm_year + 1900, now_time.tm_mon + 1,
now_time.tm_mday, now_time.tm_hour, now_time.tm_min, now_time.tm_sec);
}
程序代码
//遍历指定位置指定后缀的文件
int listFiles(const char *dir,const char *logo,int &num )
//dir:查找的目录
//logo:查找的后缀名称
//num:符合要求的文件个数
//返回值:0代表有文件、-1代表无文件
{
num = 0;
struct tm now_time;
char dirNew[200];//文件名称
strcpy(dirNew,dir);
strcat(dirNew,"\\");//查找指定后缀的文件
strcat(dirNew,logo);
cout
else
{
num ++;
localtime_s(&now_time,&findData.time_write);
cout <