linux整个文件夹下全部文件的属性,C/C++遍历目录下的所有文件(Windows/Linux篇,超详细)...

前面的一篇文章我们讲了用Windows API遍历一个目录下的所有文件,这次我们讲用一种Windows/Linux通用的方法遍历一个目录下的所有文件。

Windows/Linux的IDE都会提供一个头文件——。看名字,似乎是关于I/O的,但是实际上它还提供了类似于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位整数和字符类型上有所区别,但整体上相同。大致定义如下(MSDN):

struct_finddata_t

{

unsigned attrib;

size_t time_create;

size_t time_access;

size_t time_write;

_fsize_t size;charname[_MAX_PATH];

};

对于不同的_finddata_t结构,time_create、time_access和time_write的类型为_time32_t或_time64_t,size的类型为_fsize_t或__int64,name为char[_MAX_PATH]或wchar_t[_MAX_PATH]。

attrib

unsigned类型,文件属性。

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。

一般_finddata_t被定义为_finddata32_t/_finddata64i32_t,_wfinddata_t被定义为_wfinddata32_t/_wfinddata64i32_t。为方便,下文中将_finddata_t和_wfinddata_t统称为_finddata_t。

文件属性常量

一个文件/目录可以有多种属性,每种属性可以是下面列出的属性之一。

_A_ARCH

档案。文件被BACKUP指令改变或清除时被设置。值:0x20。

_A_HIDDEN

隐藏。使用DIR指令一般看不到,除非使用/AH选项。值:0x02。

_A_NORMAL

普通。文件没有更多属性被设置,可以没有限制地被读或写。值:0x00。

_A_RDONLY

只读。不能以“写”为目的打开该文件,并且不能创建同名的文件。值:0x01。

_A_SUBDIR

子目录。值:0x10。

_A_SYSTEM

系统文件。使用DIR指令一般看不见,除非使用/A或/A:S选项。值:0x04。

要检查x是否含有某个属性a,可以用x & a进行检查。指定多个属性可以使用按位or运算符,例如_A_SYSTEM |  _A_RDONLY | _A_HIDDEN。

通配符(wildcards)

遍历文件目录时需要使用通配符,详见。

_findfirst()/_findnext()/_findclose()函数

_findfirst()函数

intptr_t _findfirst(const char *filespec,struct _finddata_t *fileinfo

);

实际上_findfirst()有10个版本,这里只列出一个。

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。如果没有更多能够找到的文件了,也会导致失败。

程序代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值