找回密码
 加入
搜索
查看: 5341|回复: 8

[系统综合] 【已解决】关于_FileListToArray 自定义函数 大家来看看这个两段代码

  [复制链接]
发表于 2010-9-8 02:25:27 | 显示全部楼层 |阅读模式
本帖最后由 linkuncool 于 2010-9-8 18:10 编辑

这个令我很头痛
#Include <File.au3>
#Include <Array.au3>

For $i = 0 to 10 step 1 
        DirCreate ("d:\123\$"&$i&"$")
Next

$folderlist=_FileListToArray ("d:\123")

If $folderlist=0 Then
        MsgBox (0,"","发生错误")
ElseIf @error = 1 Then
        MsgBox (0,"","Path not found or invalid")
ElseIf @error = 2 Then
        MsgBox (0,"","Invalid $sFilter")
ElseIf @error = 3 Then
        MsgBox (0,"","Invalid $iFlag")
ElseIf @error = 4 Then
        MsgBox (0,"","No File(s) Found")
Else
        _ArrayDisplay($FolderList,"$FileList")
EndIf
上面的代码 _FileListToArray 不带参数运行  OK
#Include <File.au3>
#Include <Array.au3>

For $i = 0 to 10 step 1 
        DirCreate ("d:\123\$"&$i&"$")
Next

$folderlist=_FileListToArray ("d:\123",2)

If $folderlist=0 Then
        MsgBox (0,"","发生错误")
ElseIf @error = 1 Then
        MsgBox (0,"","Path not found or invalid")
ElseIf @error = 2 Then
        MsgBox (0,"","Invalid $sFilter")
ElseIf @error = 3 Then
        MsgBox (0,"","Invalid $iFlag")
ElseIf @error = 4 Then
        MsgBox (0,"","No File(s) Found")
Else
        _ArrayDisplay($FolderList,"$FileList")
EndIf
我需要返回的是文件夹的列表
参数2 代表 返回文件夹名列表
执行失败
#Include <File.au3>
#Include <Array.au3>

For $i = 0 to 10 step 1 
        DirCreate ("d:\123\$"&$i&"$")
Next

$folderlist=_FileListToArray ("d:\123","",2)

If $folderlist=0 Then
        MsgBox (0,"","发生错误")
ElseIf @error = 1 Then
        MsgBox (0,"","Path not found or invalid")
ElseIf @error = 2 Then
        MsgBox (0,"","Invalid $sFilter")
ElseIf @error = 3 Then
        MsgBox (0,"","Invalid $iFlag")
ElseIf @error = 4 Then
        MsgBox (0,"","No File(s) Found")
Else
        _ArrayDisplay($FolderList,"$FileList")
EndIf
这样也不行  

返回以前只是需要文件名的返回值  

今天需要文件夹的  昨天晚上就开始调试了

实在不知道为什么

帮助文件里写的清清楚楚啊

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-9-8 05:52:34 | 显示全部楼层
回复 1# linkuncool

这样可以
#Include <File.au3>
#Include <Array.au3>

For $i = 0 to 10 step 1 
        DirCreate ("D:\AU3\$"&$i&"$")
Next

$folderlist=_FileListToArray ("D:\AU3","*.*",2)

If $folderlist=0 Then

        MsgBox (0,"","发生错误")

ElseIf @error = 1 Then

        MsgBox (0,"","Path not found or invalid")

ElseIf @error = 2 Then

        MsgBox (0,"","Invalid $sFilter")

ElseIf @error = 3 Then

        MsgBox (0,"","Invalid $iFlag")

ElseIf @error = 4 Then

        MsgBox (0,"","No File(s) Found")

Else

        _ArrayDisplay($FolderList,"$FileList")

EndIf
 楼主| 发表于 2010-9-8 06:14:44 | 显示全部楼层
如果123 中用 文件存在 就不行了  再说了   _FileListToArray 这个函数  我们都指定 返回的是文件夹了 filter 根本就不需要啊 , 返回文件列表的话  需要的话 需要声明下

之前已经解决 实现了 获取指定的 文件夹列表

我就是奇怪 为什么帮助文件里 写的清清楚楚   的  
执行后出问题呢
发表于 2010-9-8 06:59:48 | 显示全部楼层
用文件存在也可以阿
$folderlist=_FileListToArray ("d:\123","*",1)

你看File.au3

Func _FileListToArray($sPath, $sFilter = "*", $iFlag = 0)
        Local $hSearch, $sFile, $sFileList, $sDelim = "|"
        $sPath = StringRegExpReplace($sPath, "[\\/]+\z", "") & "\" ; ensure single trailing backslash
        If Not FileExists($sPath) Then Return SetError(1, 1, "")
        If StringRegExp($sFilter, "[\\/:><\|]|(?s)\A\s*\z") Then Return SetError(2, 2, "")
        If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
        $hSearch = FileFindFirstFile($sPath & $sFilter)
        If @error Then Return SetError(4, 4, "")
        While 1
                $sFile = FileFindNextFile($hSearch)
                If @error Then ExitLoop
                If ($iFlag + @extended = 2) Then ContinueLoop
                $sFileList &= $sDelim & $sFile
        WEnd
        FileClose($hSearch)
        If Not $sFileList Then Return SetError(4, 4, "")
        Return StringSplit(StringTrimLeft($sFileList, 1), "|")
EndFunc;==>_FileListToArray

看这个
_FileListToArray($sPath, $sFilter = "*", $iFlag = 0)

如果这样写$folderlist=_FileListToArray ("d:\123",2)
把$sFilter 当成2了,要使用$iFlag参数必须写$sFilter参数

代码是从左边开始读,什么函数都一样,不能跳过前边的参数

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-9-8 10:08:38 | 显示全部楼层
回复 1# linkuncool
看帮助了吗?仔细看了吗?参数用对了吗?
请不要随意说XXX有BUG,XXX运行出错!
借用P大的话,先自行检查1000次。
#Include <File.au3>
#Include <Array.au3>

For $i = 0 to 10 step 1 
        DirCreate ("d:\123\$"&$i&"$")
Next

$folderlist=_FileListToArray ("d:\123","*",2);注意参数,别偷懒

If $folderlist=0 Then
        MsgBox (0,"","发生错误")
ElseIf @error = 1 Then
        MsgBox (0,"","Path not found or invalid")
ElseIf @error = 2 Then
        MsgBox (0,"","Invalid $sFilter")
ElseIf @error = 3 Then
        MsgBox (0,"","Invalid $iFlag")
ElseIf @error = 4 Then
        MsgBox (0,"","No File(s) Found")
Else
        _ArrayDisplay($FolderList,"$FileList")
EndIf

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

 楼主| 发表于 2010-9-8 18:07:53 | 显示全部楼层
回复 2# lixiaolong
file.au3  我看了下  里面的filter=*  是默认的
还一直在想文件夹又不分类型 filter 哪来干什么用
help 写 the filter to use, default is *.  
我的错
发表于 2010-9-9 11:29:24 | 显示全部楼层
学习。。。谢谢
发表于 2013-4-9 00:22:43 | 显示全部楼层
真需要这个
发表于 2013-12-31 11:05:09 | 显示全部楼层
改P大的話 !加倍學習1000次!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-28 15:31 , Processed in 0.115722 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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