基 础 函 数 参 考


FileFindFirstFile

返回文件搜索的句柄.

FileFindFirstFile ( "文件名" )

参 数

文件名 表示被搜索文件名称的字符串. (*? 等通配符)

返 回 值

成功: 返回搜索"句柄", 供 FileFindNextFile 函数调用.
失败: 返回 -1, 发生错误. 如果文件夹为空, 则设置 @error 为 1.

备 注

搜索不区分大小写.
通配符约定: 一般而言, 星号 * 可代替 0 或多个字符, 问号 ? 可代替 0 或一个字符.
若指定的搜索字符串中只有通配符(或 "*.*"), 请查看下面示例的返回值!

可以使用一个通配符来匹配部分文件名或扩展名,例如 a*.b?.
?? 似乎等于 * (在 Microsoft 文档资料中没有描述).
当扩展名使用 3 个字符搜索, 则任何以这 3 个字符开始的扩展名都将匹配,
例如 "*.log" 将匹配 "test.log_1". (在 Microsoft 文档资料中没有描述).

使用 FileFind... 函数完成搜索后, 务必调用 FileClose() 函数释放搜索句柄.

返回目录名称将根据是否有通配符而定.

相 关 函 数

FileClose, FileFindNextFile

函 数 示 例


; 显示当前目录所有文件的文件名.
Local $search = FileFindFirstFile("*.*")

; 检查搜索是否成功
If $search = -1 Then
    MsgBox(0, "错误", "没有匹配搜索模式的文件或目录")
    Exit
EndIf

While 1
    Local $file = FileFindNextFile($search)
    If @error Then ExitLoop

    MsgBox(4096, "找到的文件:", $file)
WEnd

; 关闭搜索句柄
FileClose($search)

;=============================
;附加示例: 递归查找当前目录及其子目录下的所有文件(3.3.7.20 无此示例)
;=============================
FindAllFile(@ScriptDir)

Func FindAllFile($sDir)
    Local $hSearch = FileFindFirstFile($sDir & "\*.*")
    ; 检查搜索是否成功
    If $hSearch = -1 Then Return
    While 1
        Local $sFile = FileFindNextFile($hSearch)
        If @error Then ExitLoop
        
        If @extended Then
            FindAllFile($sDir & "\" & $sFile)
            ContinueLoop
        EndIf
        FileWriteLine("找到的文件.txt",$sDir & "\" & $sFile)
    WEnd
    ; 关闭搜索句柄
    FileClose($hSearch)
EndFunc

provider with jb51.net (unicode)