[решено] Вывести все файлы и папки

Ответить
Аватара пользователя
morgan1991

[решено] Вывести все файлы и папки

Сообщение morgan1991 »

Вот нашол в справке такое:





Код:

Код: Выделить всё

#Include 
#Include 
$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]]] )
Аватара пользователя
Creat0R

Re: [решено] Вывести все файлы и папки

Сообщение Creat0R »

Цитата 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

Re: [решено] Вывести все файлы и папки

Сообщение morgan1991 »

Creat0R, спасибо, оно выводит только папки с рабочего стола, а надо всё полностью
Цитата Creat0R:



$aFilesList = _FileListToArrayEx(@DesktopDir, "*", 1)
[решено] Вывести все файлы и папки




тут я сделал бы так:



Код:

Код: Выделить всё

$aFilesList = _FileListToArrayEx(@DesktopDir, "*", 0)
Аватара пользователя
proxy

Re: [решено] Вывести все файлы и папки

Сообщение proxy »

Код: Выделить всё

#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
Аватара пользователя
morgan1991

Re: [решено] Вывести все файлы и папки

Сообщение morgan1991 »

Дак всёравно выводит только с рабочего стола, а надо со всех жестаков и носителей.
Аватара пользователя
proxy

Re: [решено] Вывести все файлы и папки

Сообщение proxy »

Цитата 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
Аватара пользователя
Creat0R

Re: [решено] Вывести все файлы и папки

Сообщение Creat0R »

Цитата proxy:



заменяешь на это
[решено] Вывести все файлы и папки




Не советую это делать (проверка на папки нужна, чтобы вернуть правильную структуру каталогов). Тем более что можно просто «If $iMode 0 Then», зачем два раза проверять Изображение.




Цитата proxy:



напоримся на ограничения по выводу строк
[решено] Вывести все файлы и папки




Неа, в _ArrayDisplay это предусмотренно (в 3.2.8.1+ по крайней мере).
Ответить

Вернуться в «AutoIt»