找回密码
 加入
搜索
查看: 7977|回复: 15

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

  [复制链接]
发表于 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 字符的文件时  就只能查找一层

子目录不会被查找  这是为什么  大家知道的帮帮我 谢谢了
发表于 2011-12-22 16:01:15 | 显示全部楼层
这个函数本来就只查找特定目录下的文件和文件夹, 其子目录里的东西是不会被查找的
要查找子目录, 还要再次调用该函数来查找每一个子目录.
关于查找目录和文件夹, 论坛有不少例子, 请善用论坛搜索...
 楼主| 发表于 2011-12-22 17:00:26 | 显示全部楼层
我善用了很多次论坛搜索了 也没有看到相关的解决办法 ,要是真想帮我 教教我怎么善用如何???
 楼主| 发表于 2011-12-22 17:02:18 | 显示全部楼层
而且 上面的示例代码 本来就是递归调用

只要是列出所有文件  功能是正常的  关键是指定文件名的时候 只能搜素一层
 楼主| 发表于 2011-12-22 18:24:07 | 显示全部楼层
难道没人愿意帮帮我吗 ?我的天啊  这个论坛怎么了啊
发表于 2011-12-22 18:47:05 | 显示全部楼层
回复 5# jiang1234


    你的子目录名不含“Y”,它干嘛查找。
 楼主| 发表于 2011-12-22 20:56:10 | 显示全部楼层
我要查找指定的文件啊  那要怎么做啊 大哥帮帮我吧 这个问题 我真是郁闷了几天了

比如要查找包含 Y的文件 在指定的目录中有几个
发表于 2011-12-22 21:24:17 | 显示全部楼层
回复 7# jiang1234


    根据这个改下,你那个效率太低
http://www.autoitx.com/forum.php ... amp;fromuid=7644923
 楼主| 发表于 2011-12-22 22:10:31 | 显示全部楼层
上面的那个代码很简洁 但是还是没有解决 怎么搜索指定的文件  比如 我要找出一个文件中扩展名 为 mp3的所有文件  用上面的代码是不行的
发表于 2011-12-22 22:20:15 | 显示全部楼层
上面的那个代码很简洁 但是还是没有解决 怎么搜索指定的文件  比如 我要找出一个文件中扩展名 为 mp3的所有 ...
jiang1234 发表于 2011-12-22 22:10


不是叫你改下吗?不是“用上面的代码是不行的”而是不动手是不行的。
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
 楼主| 发表于 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
 楼主| 发表于 2011-12-22 23:02:06 | 显示全部楼层
谢谢 啊 版主 不要嫌我麻烦啊 我是刚开始学习 这个语言
发表于 2011-12-23 00:05:42 | 显示全部楼层
请及时修改标题,添加“已解决”字符
发表于 2011-12-23 00:10:04 | 显示全部楼层
本帖最后由 netegg 于 2011-12-23 00:13 编辑

回复 11# jiang1234
[au3]
#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)[/au3]
如果文件列表已经存在文件里的话
发表于 2011-12-23 00:21:50 | 显示全部楼层
回复  jiang1234

如果文件列表已经存在文件里的话
netegg 发表于 2011-12-23 00:10



    他的11#是没看见我在10#的回复时发的~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-28 11:20 , Processed in 0.082753 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表