代码
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
欢迎转发和评论!