Windows 文件操作 — 查找文件

开始查找文件,首先使用FindFirstFile函数,如果函数执行成功,返回一个句柄hFindFile来对应这个寻找操作,接下来可以利用这个句柄循环调用FindNextFile继续查找其它文件,直到FindNextFile返回失败为止.最后关闭hFindFile句柄.一般查找文件的代码结构:

invoke FindFirstFile,lpFindFile,lpFindFileDate
.if eax != INVALID_HANDLE_VALUE
mov hFindFile,eax
.repeat
;处理本次找到的文件
invoke FindNextFile,hFindFile,addr lpFindFileData
.until eax==FALSE
invoke FindClose,hFindFile
.endif

FindFirstFile的参数lpFindFile指向一个字符串,代表要寻找的文件名,如果文件名中不锯含路径,将在当前目录中查找文件.在文件名中可以包含'*'或'?'通配符
FindFirstFile函数和FindNextFile函数中的lpFindFileData参数则指向一个缓冲区,函数会在缓冲区中返回一个WIN_FIND_DATA结构,结构中包括了Windows查找过程中临时使用的数据和找到的文件名与属性等数据,该结构定义如下:

WIN32_FIND_DATA STRUCT
dwFileAttributes DWORD ? ;文件属性
ftCreationTime FILETIME <> ;文件的创建日期
ftLastAccessTime FILETIME <> ;文件的最后存取日期
ftlastWriteTime FILETIME <> ;文件的最后修改日期
nFileSizeHigh DWORD ? ;文件长度的高32位
nFileSizeLow DWORD ? ;文件长度的低32位
dwReserved0 DWORD ? ;内部使用
dwReserved1 DWORD ? ;内部使用
cFileName BYTE MAX_PATH dup(?) ;本次找到的文件名
cAlternate BYTE 14 dup(?) ;文件的8.3结构的短文件名
WIN32_FIND_DATA ENDS

dwFileAttributes字段可以是下面取值的组合,通过它可以检查找到的是一个文件还是一个子目录,以及属性
FILE_ATTRIBUTE_ARCHIVE:文件包含归档属性
FILE_ATTRIBUTE_COMPRESSED:文件和目录被压缩
FILE_ATTRIBUTE_DIRECTORY:找到的是一个目录
FILE_ATTRIBUTE_HIDDEN:文件包含隐含属性
FILE_ATTRIBUTE_NORMAL:文件没有其它属性
FILE_ATTRIBUTE_READONLY:文件包含只读属性
FILE_ATTRIBUTE_SYSTEM:文件包含系统属性
FILE_ATTRIBUTE_TEMPORARY:文件是一个临时文件
注意:cFileName字段中包括了找到的文件名,这个文件名中并不包含路径.

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注