【已解决】_FileListToArray 咋样用数组方式来实现
本帖最后由 xz00311 于 2014-7-7 18:50 编辑正确答案在http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=44688&pid=586134&fromuid=7636455 这里
;C:\Users\chtyfox\Desktop\板端\11\222\333\4444\55555\666666
#Include <File.au3>
#Include <Array.au3>
Local $var ,$pathfile,$pa,$FILE2
$_Path = "C:\Users\chtyfox\Desktop\板端"
_FileReadDir($_Path)
$FILE2 = StringRight($pathfile, StringLen($pathfile) - StringInStr($pathfile, "\", 1, -1))
MsgBox(0,"1",$FILE2)
$1 = StringLen($FILE2)+1
$2 = StringLen($pathfile) -$1
$3 = StringLeft($pathfile,$2)
$FILE3 = StringRight($3, StringLen($3) - StringInStr($3, "\", 1, -1) )
MsgBox(0,"2",$FILE3)
$4 = StringLen($FILE3)+1
$5 = StringLen($3) -$4
$6 = StringLeft($3,$5)
$FILE4 = StringRight($6, StringLen($6) - StringInStr($6, "\", 1, -1) )
MsgBox(0,"3",$FILE4)
$7 = StringLen($FILE4)+1
$8 = StringLen($6) -$7
$9 = StringLeft($6,$8)
$FILE5 = StringRight($9, StringLen($9) - StringInStr($9, "\", 1, -1) )
MsgBox(0,"4",$FILE5)
$10 = StringLen($FILE5)+1
$11 = StringLen($9) -$10
$12= StringLeft($9,$11)
$FILE6 = StringRight($12, StringLen($12) - StringInStr($12, "\", 1, -1) )
MsgBox(0,"5",$FILE6)
$13 = StringLen($FILE6)+1
$14= StringLen($12) -$13
$15= StringLeft($12,$14)
$FILE7 = StringRight($15, StringLen($15) - StringInStr($15, "\", 1, -1) )
MsgBox(0,"6",$FILE7)
Func _FileReadDir($_Path)
$Folder = _FileListToArray($_Path, "*", 2)
If Not IsArray($Folder) Then Return 0
For $i = 1 To $Folder
$pathfile =$_Path & "\" & $Folder[$i]
_FileReadDir($_Path & "\" & $Folder[$i])
Next
EndFunc
帮顶学习。。。。。。。。。。。。。。。。。 _FileListToArray即可 回复 1# xz00311
_FileListToArray 咋样用数组方式来实现??
_FileListToArray 本身的結果是數組哪還要怎麼用數組實現??
你的 程式裡面
Func _FileReadDir($_Path)
$Folder = _FileListToArray($_Path, "*", 2)
If Not IsArray($Folder) Then Return 0
For $i = 1 To $Folder
$pathfile =$_Path & "\" & $Folder[$i]
_FileReadDir($_Path & "\" & $Folder[$i])
Next
EndFunc
這一段是幹嘛用的你知道嗎??
$Folder = _FileListToArray($_Path, "*", 2)
$Folder這個不就是 一個數組了嗎??
===========================
滅火器使用下去後 怎麼樣 可以滅火呀????
這個問題如果 你可以回答那你的問題就有解了 我与楼上有同样的感觉呵。不过看楼主已是高级会员了啊,一时难以理解,胡乱猜测一下:楼主想要实现的功能 比_FileListToArray()强一点,即想把所有子目录下的文件也输出在数组中? 我对数组方面的东西很差的有些东西不能理解,学C的时候数组也是最差的不知道咋样用,我只要文件夹的名字然后在其他目录在创建11\222\333\4444\55555\666666这样的方式的文件夹 其实我想到 $FILE3- $FILE7咋写了就是$FILE2这个还没想通 回复学习。。。。。。。。。。。。。。。。。。。 我对数组方面的东西很差的有些东西不能理解,学C的时候数组也是最差的不知道咋样用,我只要文件夹的名字然后 ...
xz00311 发表于 2014-7-7 10:24 http://www.autoitx.com/images/common/back.gif
是不是想多了… 遍历目录后直接在其后面加上 \11\222\333\4444\55555\666666,用 DirCreate() 创建不就行了 Local $sPath = 'C:\Users\chtyfox\Desktop\板端'
$aLine = _FileFindMain($sPath)
If @Error Then Exit
;_ArrayDisplay($aLine, $aLine)
For $i = 0 To UBound($aLine) - 1
MsgBox(0, '', $aLine[$i] & '\11\222\333\4444\55555\666666')
;DirCreate($aLine[$i] & '\11\222\333\4444\55555\666666')
Next
Func _FileFindMain($_Path)
Local $sFiles
__FileFinda($sPath, $sFiles)
Local $aLine = StringRegExp($sFiles, '\V+', 3)
If @Error Then Return SetError(1)
Return $aLine
EndFunc ;==>_FileFindMain
Func __FileFinda($sDir, ByRef $sOut)
Local $hSearch = FileFindFirstFile($sDir & '\*')
If $hSearch = -1 Then Return
While 1
Local $sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
If Not @extended Then ContinueLoop
__FileFinda($sDir & '\' & $sFile, $sOut)
$sOut &= $sDir & '\' & $sFile & @CRLF
WEnd
FileClose($hSearch)
EndFunc ;==>__FileFinda
我是在做批量安装FileInstall_Aid这个的新加的功能,代码我是反编译别人的所以不能把源码放出来,我加的功能是先获取里面的文件夹里面所有文件夹,然后在释放的时候在其他目录创建同样的层次的文件夹 ;C:\Users\chtyfox\Desktop\板端\11\222\333\4444\55555\666666这里面的文字不是固定啊,是一直变化的 谢谢AFAN的代码给到我思路的不知道创建文件夹还可以这样写的谢谢 你是想获取目录及子目录的结构,然后在指定的文件夹中创建同样的目录结构?Local $sPath = 'C:\Users\chtyfox\Desktop\板端'
Local $sPathNew = 'X:\Xa\Xb'
$aLine = _FileFinDir($sPath)
If @error Then Exit
For $i = 0 To UBound($aLine) - 1
MsgBox(0, '', $sPathNew & '\' & $aLine[$i])
;DirCreate($sPathNew & '\' & $aLine[$i])
Next
Func _FileFinDir($_Path)
$_Path = StringRegExpReplace($_Path, '^\s+|\\+$|\s+$', '')
Local $sFiles
__FileFinda($_Path, $sFiles)
Local $iLen = StringLen($_Path) + 1
$sFiles = StringRegExpReplace($sFiles, '(?m)^.{' & $iLen & '}', '')
Local $aLine = StringRegExp($sFiles, '\V+', 3)
If @error Then Return SetError(1)
Return $aLine
EndFunc ;==>_FileFinDir
Func __FileFinda($sDir, ByRef $sOut)
Local $hSearch = FileFindFirstFile($sDir & '\*')
If $hSearch = -1 Then Return
While 1
Local $sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
If Not @extended Then ContinueLoop
__FileFinda($sDir & '\' & $sFile, $sOut)
$sOut &= $sDir & '\' & $sFile & @CRLF
WEnd
FileClose($hSearch)
EndFunc ;==>__FileFinda 是的,文件夹里面的所有文件夹和子文件夹
页:
[1]
2