代码
getFiles()
函数的作用:
path是一个文件夹路径,函数在path
文件夹下寻找所有文件(包括子文件夹下的文件),然后将所有文件的路径存入files
1 |
|
代码解读
_finddata_t
它是存储一个文件相关信息的结构体,查看其定义:
1 |
我这里是_finddata64i32_t
,查看其定义
1 | struct _finddata64i32_t |
attrib
是该结构体的一个成员,是attribute(属性)的缩写。
它代表文件的属性,下边是相应的宏
1 |
成员name
就是文件名字嘛…
_findfirst
第一个参数是标明文件的字符串,可支持通配符:*.c
代表后缀为.c的文件,*
就代表所有文件
第二个参数是_finddata_t
类型变量的地址。该变量用来保存文件信息。
这有坑
我跟网上有点不同的是,网上我看到的例子定义的hFile
都是long
型,我用long
型打开文件就出问题了。
其实VS已经警告了warning C4244: “=”: 从“intptr_t”转换到“long”,可能丢失数据
。
我没在意它,后来改掉了类型就成功了。(就冲这一点,VS天下第一!)
查看_findfirst
定义
1 |
我这里用的是_findfirst64i32
,查看其定义
1 | _ACRTIMP intptr_t __cdecl _findfirst64i32( |
说明函数返回intptr_t
继续查看intptr_t
定义,得到
1 |
|
所以intptr_t
在我电脑上实际是__int64
,转换成long可能会丢失数据。
_findnext
查看其定义
1 |
我这里是_findnext64i32
,查看其定义
1 | _ACRTIMP int __cdecl _findnext64i32( |
没啥讲的,好好看看_findfirst
部分就懂这个了。
位运算
fileinfo.attrib & _A_SUBDIR
,代码中用到了按位与&。在此表示是文件夹(subdirectory)。位运算经常用在表示属性。具体的这次先不讲。
作者:@臭咸鱼
本文为作者原创,转载请注明出处:https://chouxianyu.github.io
欢迎转发和评论!