Показать полную графическую версию : [решено] Вывести все файлы и папки
morgan1991
18-03-2009, 16:06
Вот нашол в справке такое:
#Include <File.au3>
#Include <Array.au3>
$FileList=_FileListToArray(@DesktopDir)
If @Error=1 Then
MsgBox (0,"","No Files\Folders Found.")
Exit
EndIf
_ArrayDisplay($FileList,"$FileList")
Но здесь он считывает всё только на рабочем столе. А как не зная структуру папок и файлов вывести всё в окошке:
GUICtrlCreateTreeView ( left, top [,width [,height [,style [,exStyle]]] )
как не зная структуру папок и файлов вывести всё в окошке »
#include <Array.au3>
$aFilesList = _FileListToArrayEx(@DesktopDir, "*", 1)
_ArrayDisplay($aFilesList)
Func _FileListToArrayEx($sPath, $sMask="*", $iMode=-1) ;$iMode > 0 только папки (маска игнорируется), иначе папки + файлы
If Not StringInStr(FileGetAttrib($sPath & "\"), "D") Then Return SetError(1, 0, 0)
Local $hSearch, $sFindNext, $sFilePath, $iPathIsFolder, $i = 0
Local $sRegExpFilter = StringReplace(StringReplace($sMask, ".", "\."), "*", ".*")
Local $iMax_Ret_Paths = 10000
Local $aPathesArr[$iMax_Ret_Paths+1] = [1, $sPath]
While $i < $aPathesArr[0]
$i += 1
$hSearch = FileFindFirstFile($aPathesArr[$i] & "\*")
If $hSearch = -1 Then ContinueLoop
While 1
$sFindNext = FileFindNextFile($hSearch)
If @error Then ExitLoop
$sFilePath = $aPathesArr[$i] & "\" & $sFindNext
$iPathIsFolder = StringInStr(FileGetAttrib($sFilePath & "\"), "D")
If $iMode <= 0 Or ($iMode > 0 And $iPathIsFolder) Then
If $iPathIsFolder Or (Not $iPathIsFolder And StringRegExp($sFindNext, "(?i)" & $sRegExpFilter)) Then
If $aPathesArr[0] >= $iMax_Ret_Paths Then
$iMax_Ret_Paths *= 2
ReDim $aPathesArr[$iMax_Ret_Paths+1]
EndIf
$aPathesArr[0] += 1
$aPathesArr[$aPathesArr[0]] = $sFilePath
EndIf
EndIf
WEnd
FileClose($hSearch)
Wend
ReDim $aPathesArr[$aPathesArr[0]+1]
Return $aPathesArr
EndFunc
morgan1991
18-03-2009, 17:17
Creat0R, спасибо, оно выводит только папки с рабочего стола, а надо всё полностью$aFilesList = _FileListToArrayEx(@DesktopDir, "*", 1) »
тут я сделал бы так:
$aFilesList = _FileListToArrayEx(@DesktopDir, "*", 0)
#include <Array.au3>
$aFilesList = _FileListToArrayEx(@DesktopDir, "*", 1)
_ArrayDisplay($aFilesList)
Func _FileListToArrayEx($sPath, $sMask="*", $iMode=-1) ;$iMode > 0 только папки (маска игнорируется), иначе папки + файлы
If Not StringInStr(FileGetAttrib($sPath & "\"), "D") Then Return SetError(1, 0, 0)
Local $hSearch, $sFindNext, $sFilePath, $iPathIsFolder, $i = 0
Local $sRegExpFilter = StringReplace(StringReplace($sMask, ".", "\."), "*", ".*")
Local $iMax_Ret_Paths = 10000
Local $aPathesArr[$iMax_Ret_Paths+1] = [1, $sPath]
While $i < $aPathesArr[0]
$i += 1
$hSearch = FileFindFirstFile($aPathesArr[$i] & "\*")
If $hSearch = -1 Then ContinueLoop
While 1
$sFindNext = FileFindNextFile($hSearch)
If @error Then ExitLoop
$sFilePath = $aPathesArr[$i] & "\" & $sFindNext
$iPathIsFolder = StringInStr(FileGetAttrib($sFilePath & "\"), "D")
If $iMode <= 0 Or $iMode > 0 Then
If $iPathIsFolder Or (Not $iPathIsFolder And StringRegExp($sFindNext, "(?i)" & $sRegExpFilter)) Then
If $aPathesArr[0] >= $iMax_Ret_Paths Then
$iMax_Ret_Paths *= 2
ReDim $aPathesArr[$iMax_Ret_Paths+1]
EndIf
$aPathesArr[0] += 1
$aPathesArr[$aPathesArr[0]] = $sFilePath
EndIf
EndIf
WEnd
FileClose($hSearch)
Wend
ReDim $aPathesArr[$aPathesArr[0]+1]
Return $aPathesArr
EndFunc
вот это:
If $iMode <= 0 Or ($iMode > 0 And $iPathIsFolder) Then
заменяешь на это:
If $iMode <= 0 Or $iMode > 0 Then
morgan1991
18-03-2009, 19:03
Дак всёравно выводит только с рабочего стола, а надо со всех жестаков и носителей.
а надо со всех жестаков и носителей. »
прочитать то можно, а вот вывести вс это в _ArrayDisplay думаю не получится,
так как скорее всего напоримся на ограничения по выводу строк
в ListView элементе.
а делается так, вот тут
$aFilesList = _FileListToArrayEx(@DesktopDir, "*", 1)
@DesktopDir надо заменить на адрес диска, к примеру так:
$aFilesList = _FileListToArrayEx("c:\", "*", 1)
Все диски можно получить:
$var = DriveGetDrive( "all" )
If NOT @error Then
MsgBox(4096,"", "Found " & $var[0] & " drives")
For $i = 1 to $var[0]
MsgBox(4096,"Drive " & $i, $var[$i])
Next
EndIf
а далее перебором вызывать поиск файлов и папок..
файлов та многа на жестких - обробатываться бууууууууддддееееиттт )))))))))))))
$var = DriveGetDrive( "all" )
If NOT @error Then
;~ MsgBox(4096,"", "Found " & $var[0] & " drives")
For $i = 1 to $var[0]
;~ MsgBox(4096,"Drive " & $i, $var[$i])
$aFilesList = _FileListToArrayEx($var[$i] & "\", "*", 1)
_ArrayDisplay($aFilesList)
Next
EndIf
заменяешь на это »
Не советую это делать (проверка на папки нужна, чтобы вернуть правильную структуру каталогов). Тем более что можно просто «If $iMode <> 0 Then», зачем два раза проверять :).
напоримся на ограничения по выводу строк »
Неа, в _ArrayDisplay это предусмотренно (в 3.2.8.1+ по крайней мере).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.