Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Вывести все файлы и папки

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

Аватара для morgan1991

Старожил


Сообщения: 398
Благодарности: 13

Профиль | Сайт | Отправить PM | Цитировать


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

Код: Выделить весь код
#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]]] )

-------
Хочу научиться писать драйвера на с++


Отправлено: 16:06, 18-03-2009

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:37, 18-03-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для morgan1991

Старожил


Сообщения: 398
Благодарности: 13

Профиль | Сайт | Отправить PM | Цитировать


Creat0R, спасибо, оно выводит только папки с рабочего стола, а надо всё полностью
Цитата Creat0R:
$aFilesList = _FileListToArrayEx(@DesktopDir, "*", 1) »
тут я сделал бы так:
Код: Выделить весь код
$aFilesList = _FileListToArrayEx(@DesktopDir, "*", 0)

-------
Хочу научиться писать драйвера на с++


Отправлено: 17:17, 18-03-2009 | #3


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
#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

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:15, 18-03-2009 | #4


Аватара для morgan1991

Старожил


Сообщения: 398
Благодарности: 13

Профиль | Сайт | Отправить PM | Цитировать


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

-------
Хочу научиться писать драйвера на с++


Отправлено: 19:03, 18-03-2009 | #5


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


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

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:13, 18-03-2009 | #6


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


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

Цитата proxy:
напоримся на ограничения по выводу строк »
Неа, в _ArrayDisplay это предусмотренно (в 3.2.8.1+ по крайней мере).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:35, 18-03-2009 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Вывести все файлы и папки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - Никак не удаляются файлы (AVI и все остальные форматы) .:[все вопросы]:. Microsoft Windows 2000/XP 105 30-06-2010 11:58
Прочее - [решено] На XP Pro видны не все общие папки sasha-lav Сетевые технологии 9 23-11-2009 14:45
Ошибка - [решено] Не запускаются ВСЕ файлы VLT Microsoft Windows 2000/XP 5 05-03-2009 10:35
[решено] Как удалить файлы с папки...? Cobra_1_Stas Автоматическая установка Windows 2000/XP/2003 40 10-10-2006 10:11
В NC не отображаются все файлы из папки i386 vivanco3 Хочу все знать 16 01-04-2004 21:01




 
Переход