-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
morgan1991 |
18-03-2009 16:06 1067358 |
Вывести все файлы и папки
Вот нашол в справке такое:
Код:
#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]]] )
|
Цитата:
Цитата morgan1991
как не зная структуру папок и файлов вывести всё в окошке »
|
Код:
#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 1067404 |
Creat0R, спасибо, оно выводит только папки с рабочего стола, а надо всё полностью
Цитата:
Цитата 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 1067532 |
Дак всёравно выводит только с рабочего стола, а надо со всех жестаков и носителей.
|
Цитата:
Цитата morgan1991
а надо со всех жестаков и носителей. »
|
прочитать то можно, а вот вывести вс это в _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», зачем два раза проверять :).
Цитата:
Цитата proxy
напоримся на ограничения по выводу строк »
|
Неа, в _ArrayDisplay это предусмотренно (в 3.2.8.1+ по крайней мере).
|
Время: 14:32.
© OSzone.net 2001-