jiang1234 发表于 2011-12-22 12:41:10

关于 文件查找的问题[已解决]

本帖最后由 jiang1234 于 2011-12-23 09:02 编辑

大家好 !!我是一个AU3的小菜鸟

现在有个文件查找的问题很困扰我

我在示例上看到使用 FileFindFirstFile 函数 递归查找的例子例子如下

FileDelete("C:\1\找到的文件.txt")
FindAllFile("C:\1")
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("C:\1\找到的文件.txt",$sDir & "\" & $sFile)
    WEnd
    ; 关闭搜索句柄
    FileClose($hSearch)
EndFunc


可是我把      Local $hSearch = FileFindFirstFile($sDir & "\*.*")

改成   Local $hSearch = FileFindFirstFile($sDir & "\*Y*.*")

查找目录中所有包含 Y 字符的文件时就只能查找一层

子目录不会被查找这是为什么大家知道的帮帮我 谢谢了

user3000 发表于 2011-12-22 16:01:15

这个函数本来就只查找特定目录下的文件和文件夹, 其子目录里的东西是不会被查找的
要查找子目录, 还要再次调用该函数来查找每一个子目录.
关于查找目录和文件夹, 论坛有不少例子, 请善用论坛搜索...

jiang1234 发表于 2011-12-22 17:00:26

我善用了很多次论坛搜索了 也没有看到相关的解决办法 ,要是真想帮我 教教我怎么善用如何???

jiang1234 发表于 2011-12-22 17:02:18

而且 上面的示例代码 本来就是递归调用

只要是列出所有文件功能是正常的关键是指定文件名的时候 只能搜素一层

jiang1234 发表于 2011-12-22 18:24:07

难道没人愿意帮帮我吗 ?我的天啊这个论坛怎么了啊

afan 发表于 2011-12-22 18:47:05

回复 5# jiang1234


    你的子目录名不含“Y”,它干嘛查找。

jiang1234 发表于 2011-12-22 20:56:10

我要查找指定的文件啊那要怎么做啊 大哥帮帮我吧 这个问题 我真是郁闷了几天了

比如要查找包含 Y的文件 在指定的目录中有几个

afan 发表于 2011-12-22 21:24:17

回复 7# jiang1234


    根据这个改下,你那个效率太低
http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=29403&pid=378226&fromuid=7644923

jiang1234 发表于 2011-12-22 22:10:31

上面的那个代码很简洁 但是还是没有解决 怎么搜索指定的文件比如 我要找出一个文件中扩展名 为 mp3的所有文件用上面的代码是不行的

afan 发表于 2011-12-22 22:20:15

上面的那个代码很简洁 但是还是没有解决 怎么搜索指定的文件比如 我要找出一个文件中扩展名 为 mp3的所有 ...
jiang1234 发表于 2011-12-22 22:10 http://www.autoitx.com/images/common/back.gif

不是叫你改下吗?不是“用上面的代码是不行的”而是不动手是不行的。Local $sFiles
_FileListToStr('E:\Music', $sFiles)
If $sFiles <> '' Then FileWrite('list.txt', $sFiles)

Func _FileListToStr($sDir, ByRef $sOut)
        Local $hSearch = FileFindFirstFile($sDir & '\*')
        If $hSearch = -1 Then Return
        While 1
                Local $sFile = FileFindNextFile($hSearch)
                If @error Then ExitLoop
                If @extended Then
                        _FileListToStr($sDir & '\' & $sFile, $sOut)
                        ContinueLoop
                EndIf
                If StringRight($sFile, 4) = '.mp3' Then $sOut &= $sDir & '\' & $sFile & @CRLF
        WEnd
        FileClose($hSearch)
EndFunc   ;==>_FileListToStr

jiang1234 发表于 2011-12-22 22:43:25

恩 我现在 这样弄了一下上面的代码得到结果后在在这个文本文件中找出所有 .MP3 结尾的文件 可是这个办法 有点太傻了 呵呵 大侠们 能不能帮小弟改进一下啊Func _FileFind()
Local $file = FileOpen("c:\1\list.txt", 0)

; 检查打开的文件是否可读
If $file = -1 Then
    MsgBox(0, "错误", "不能打开文件.")
    Exit
EndIf

; 每次读取一行文本,直到文件结束.
While 1
    Local $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
       
        Local $result = StringRight($line, 4)
                               
        If $result =".mp3" Then
;~         MsgBox(0, "读取的行:", $line)
        FileWrite('c:\1\list1.txt', $line & @CRLF)
        EndIf
   
Wend

FileClose($file)

EndFunc

jiang1234 发表于 2011-12-22 23:02:06

谢谢 啊 版主 不要嫌我麻烦啊 我是刚开始学习 这个语言

afan 发表于 2011-12-23 00:05:42

请及时修改标题,添加“已解决”字符

netegg 发表于 2011-12-23 00:10:04

本帖最后由 netegg 于 2011-12-23 00:13 编辑

回复 11# jiang1234

#include <file.au3>
#include <array.au3>
local $aA, $return = ''
_filereadtoarray($file, $aA)
local $aIndex = _Arrayfindall($aA, '.mp3', 0,0,0,1)
for $i = 0 to ubound($aIndex) - 1
    $return &= $aA[$aiIndex[$i]] & @crlf
next
$resultfile = FileOpen('result.txt', 9)
filewrite($resultfile, $return)
fileclose($resultfile)
如果文件列表已经存在文件里的话

afan 发表于 2011-12-23 00:21:50

回复jiang1234

如果文件列表已经存在文件里的话
netegg 发表于 2011-12-23 00:10 http://www.autoitx.com/images/common/back.gif


    他的11#是没看见我在10#的回复时发的~
页: [1] 2
查看完整版本: 关于 文件查找的问题[已解决]