xz00311 发表于 2014-7-3 11:29:15

【已解决】_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                       

wangms 发表于 2014-7-4 09:56:13

帮顶学习。。。。。。。。。。。。。。。。。

hnfeng 发表于 2014-7-4 11:04:38

_FileListToArray即可

kk_lee69 发表于 2014-7-4 15:24:20

回复 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這個不就是 一個數組了嗎??

===========================
滅火器使用下去後 怎麼樣 可以滅火呀????

這個問題如果 你可以回答那你的問題就有解了

shqf 发表于 2014-7-4 15:57:55

我与楼上有同样的感觉呵。不过看楼主已是高级会员了啊,一时难以理解,胡乱猜测一下:楼主想要实现的功能 比_FileListToArray()强一点,即想把所有子目录下的文件也输出在数组中?

xz00311 发表于 2014-7-7 10:24:02

我对数组方面的东西很差的有些东西不能理解,学C的时候数组也是最差的不知道咋样用,我只要文件夹的名字然后在其他目录在创建11\222\333\4444\55555\666666这样的方式的文件夹

xz00311 发表于 2014-7-7 10:26:20

其实我想到 $FILE3- $FILE7咋写了就是$FILE2这个还没想通

wangms 发表于 2014-7-7 10:26:34

回复学习。。。。。。。。。。。。。。。。。。。

afan 发表于 2014-7-7 11:27:14

我对数组方面的东西很差的有些东西不能理解,学C的时候数组也是最差的不知道咋样用,我只要文件夹的名字然后 ...
xz00311 发表于 2014-7-7 10:24 http://www.autoitx.com/images/common/back.gif


    是不是想多了… 遍历目录后直接在其后面加上 \11\222\333\4444\55555\666666,用 DirCreate() 创建不就行了

afan 发表于 2014-7-7 11:28:05

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

xz00311 发表于 2014-7-7 16:57:20

我是在做批量安装FileInstall_Aid这个的新加的功能,代码我是反编译别人的所以不能把源码放出来,我加的功能是先获取里面的文件夹里面所有文件夹,然后在释放的时候在其他目录创建同样的层次的文件夹

xz00311 发表于 2014-7-7 17:04:35

;C:\Users\chtyfox\Desktop\板端\11\222\333\4444\55555\666666这里面的文字不是固定啊,是一直变化的

xz00311 发表于 2014-7-7 17:16:08

谢谢AFAN的代码给到我思路的不知道创建文件夹还可以这样写的谢谢

afan 发表于 2014-7-7 17:24:14

你是想获取目录及子目录的结构,然后在指定的文件夹中创建同样的目录结构?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

xz00311 发表于 2014-7-7 18:23:33

是的,文件夹里面的所有文件夹和子文件夹
页: [1] 2
查看完整版本: 【已解决】_FileListToArray 咋样用数组方式来实现