【已解决】如何判断多个文件或文件夹存在与否
本帖最后由 虎虎虎 于 2012-8-8 18:56 编辑如题:
使用FileExists只能判断单个文件,坛子里搜索不到相关函数或例子。 自己封装一个 啦
#include <Array.au3>
Local $a =
Local $b = FileOrFolderExists($a)
_ArrayDisplay($a)
_ArrayDisplay($b)
Func FileOrFolderExists(ByRef $a)
Local $status = ""
Local $i
For $i = 1 To $a-1
If FileExists($a[$i]) Then
$status &= "存在" & "|"
Else
$status &= "不存在" & "|"
EndIf
Next
If FileExists($a[$i]) Then
$status &= "存在"
Else
$status &= "不存在"
EndIf
Return StringSplit($status, "|")
EndFunc
楼上的是数组吗?有没有简单些的啊,还不是很理解数组 回复 3# 虎虎虎
2楼代码很好啊
Local $a = ;这样子山寨一下就变成您的版本了。就是说把你要检测的写在第二个括号里,不过要记得没写一个地一个括号就要自己加大1哦 回复 2# veket_linux
前辈 可以指点下 元素中的3是什么吗? 据我了解到的是,数组,必须留一位给gui,不然不显示窗体。3+1=4 回复veket_linux
前辈 可以指点下 元素中的3是什么吗?
魔导 发表于 2012-8-6 23:05 http://www.autoitx.com/images/common/back.gif
3是该数组包含多少条需要检测的目录或文件,就像是stringsplit返回的$array拆分后子串的数量
所以应该改为Local $a = ;这样子山寨一下就变成您的版本了。就是说把你要检测的写在第二个括号里,不过要记得没写一个地一个括号就要自己加大1哦 对 FileOrFolderExists(ByRef $a)中的ByRef还是不能理解,自已也看过解释,形参,实参,我什么时候才能顿悟啊!!! 我个人还是喜欢用AND。。。。呵呵。。。 解决这类问题必须学会写自定义函数。;例子:
#include <Array.au3>
Local $a = ['C:\boot.ini', 'C:\WINDOWS', 'C:\Documents and Settings']
Local $rt = _FilesExists($a) ;检查数组例子
MsgBox(0, @Error, '全部存在返回1,否则返回0' & @LF & $rt)
$rt = _FilesExists('C:\boot.ini |C:\WINDOWS | C:\Documents and Settings') ;检查字符串例子
MsgBox(0, @Error, '全部存在返回1,否则返回0' & @LF & $rt)
$rt = _FilesExists('C:\boot.ini |C:\WINDOWS111 | C:\Documents and Settings111', 1) ;返回不存在的文件数组例子
_ArrayDisplay($rt, '不存在的文件')
Func _FilesExists($Files, $Flag = 0, $aF = 0)
;Afan 提示:检查多个文件是否存在
;$Files - 需检查的文件,可以是字符串或1维数组:
; 为字符串时,多个文件用“|”分隔
; 为数组时,每个元素为一个文件,同时第三个参数$aF可用
;$aF - 为数组时,检查的起始元素,默认为0
;$Flag - 需返回的结果标志。
;返回值:
; 正确 - 根据$Flag的值返回结果:
; $Flag=0(默认) 全部存在返回1,否则返回0
; $Flag=1 全部存在返回1,否则返回不存在的文件数组
; 错误 - 设置@Error非零
Local $aTmp = $Files, $Start = 0
If IsArray($Files) Then ;文件数组
If UBound($Files, 0) > 1 Then Return SetError(1)
If UBound($Files) < $aF Then Return SetError(2)
$Start = $aF
Else ;文件字符串
$aTmp = StringRegExp($Files, '([^|\s][^|]+[^|\s])', 3)
If @error Then Return SetError(3)
EndIf
If $Flag Then
Local $sTmp = ''
For $i = $Start To UBound($aTmp) - 1
If Not FileExists($aTmp[$i]) Then $sTmp &= $aTmp[$i] & '|'
Next
If $sTmp = '' Then Return 1
Local $aSR = StringRegExp($sTmp, '[^|]+', 3)
Return $aSR ;返回不存在的文件数组
EndIf
For $i = $Start To UBound($aTmp) - 1
If Not FileExists($aTmp[$i]) Then Return 0
Next
Return 1
EndFunc ;==>_FilesExists
我个人还是喜欢用AND。。。。呵呵。。。
boyhong 发表于 2012-8-7 09:00 http://www.autoitx.com/images/common/back.gif
我觉得也是啊 回复 7# zch11230
哦,是这样子的啊 多谢多谢 参考楼上各位代码模仿的代码,测试没问题,不知是否是这样描述。
#include <Array.au3>
Local $Dir =
Local $i
For $i = 1 To $Dir-1
Next
If FileExists($Dir[$i]) Then
Switch MsgBox(0, "测试", _
"存在", _
0)
Case 1
EndSwitch
else
Switch MsgBox(0, "测试", _
"不存在", _
0)
Case 1
EndSwitch
endif
只能说 LZ 两年来白学了。惨不忍睹。 看到a版回复,我笑了{:face (197):}
页:
[1]
2