Войти

Показать полную графическую версию : [решено] Построение дерева каталогов


kaster
28-08-2009, 01:48
Всем привет. очередной мой нубский опус из элементарных вещей, изученных мной при достижении азов данного языка.
На этот раз передо мной встала задача - построить древовидную структуру файлов и папок для составления отчета. после хождения по просторам интернета, ничего стоящего (бесплатных естественно) кроме Karen's directory print и zdp не нашел.
Но меня ждали разочарования по каждой из прог.
Первая всюду вставляет ненужные мне и моему начальству строки типа мэйд бай бла бла бла, а вторая в таком непотребном виде представляет, что смотреть уже не хочется.
Поэтому я решил осуществить сие дело своими (и AutoIt) силами.
И так - скрипт строит дерево каталогов в текстовом и html видах с указанием кол-во файлов и папок в конце. Во втором случае есть подсветка определенных типов файлов условно разбитых на категории, типа: текстовые файла, архивы, видео-файлы, аудио файлы и тд и также непосредственно перейти в нужную папку щелкнув по ссылке. При желании список можно легко дополнить внеся соответствующие изменения в include файл со списком расширений придерживаясь формата.
как обычно, ни на что не претендует, лично моим требованиям удовлетворяет.
если есть что сказать/исправить/дополнить, то как говорится - you're welcome.
PS: не выбирайте папки с большим кол-вом файлов, скорость оставляет желать лучшего.

Updated

Дополнено до версии 2 :dirol:

* немного исправлены разделители иерархии, как в текстовом так и в html-ном вариантах
+ время генерации файла с деревом

Маааленький апдейт до версии 2.1

+ Добавил favicon.ico

PS: имеется небольшой баг при наличии одних только папок, без файлов внутри в виде лишней полоски в html - варианте (см. скрин)
победить не смог, бился долго. может у кого возникнут идеи. буду только рад

http://pic.ipicture.ru/uploads/090905/1429/thumbs/J3HUZOkcc5.png (http://ipicture.ru/Gallery/Viewfull/23255666.html)

PPS: Спасибо Creat0R'у за исправления по ускорению
Спасибо SyDr за подсказку о встроенной виндовой тулзе, которая легла за основу нового варианта html-версии построения

Creat0R
28-08-2009, 05:14
Неплохо! :up

Я тут переделал немного(?) - ускорение плюс читабельность кода.

В архиве две версии...
- Первая более шустрая, но в ней есть минус - имена файлов и папок сортируются в том порядке, в котором были найдены.
- Вторая версия медленнее, т.к использует отдельные обработки файлов и папок, т.е для папок и файлов запускается новый поиск, что замедляет работу - но зато сортировка работает как и задуманно(?).

P.S
Для ускорения обработки циклов, кроме прочего я изменил метод поиска расширении файлов, тут быстрее искать через StringInStr, чем вызывать поиск в массиве который использует лишние циклы.

SyDr
28-08-2009, 10:40
В состав винды входит программа TREE. Делает тоже самое. Правда, без всякого оформления.
Но вещь всё равно полезная. Спасибо.

kaster
28-08-2009, 10:43
Привет, Creat0R
Спасибо за дополнения. Непривычно немножко из-за переобозначений, но для постороннего глаза, наверное, действительно читабельнее ;)
По поводу скорости - да, действительно, ускорение налицо. Причем даже во втором скрипте, где отдельно обрабатываются файлы и папки, как в моем скрипте.
Отсюда я делаю вывод, что вся медленность действительно была в поиске по расширениям через массивы, и возможно из-за filewriteline вместо filewrite с возвратом каретки в конце.
PS: я наверное возьму на вооружение именно второй вариант, так как мне кажется что лучше когда сначала идут папки а потом уже файлы в стиле total commander'а

Creat0R
28-08-2009, 10:54
Непривычно немножко из-за переобозначений, но для постороннего глаза, наверное, действительно читабельнее »
Лучше привыкайте именно так писать, это принято в среде AutoIt'а.
Например строковые переменны префиксятся $s, массивы $a. Подробнее тут (http://www.autoitscript.com/autoit3/udfs/UDF_Standards.htm) (Variable Names).

возможно из-за filewriteline вместо filewrite с возвратом каретки в конце »
Не совсем. Тут если присмотреться, накапливаются данные записи в файл в отдельную переменную, и файл открывается на запись лишь в конце, после поиска файлов.

kaster
28-08-2009, 10:54
SyDr,
надо же изобрести колесо, иначе скушно :biggrin:
а оформление к выводу от TREE можно легко приделать при желании.
PS: спасибо, я не знал про эту прогу. сколько искал в гугле, ни одного упоминания почему-то о ней. Кстати работает он гораздо быстрее чем наши с Creat0R'ом скрипты

Не совсем. Тут если присмотреться, накапливаются данны :teeth: е записи в файл в отдельную переменную, и файл открывается на запись лишь в конце, после поиска файлов »

так я про то и говорю, накопить данные а потом хором написать, как мне кажется, быстрее, чем писать по строке каждый раз.
Лучше привыкайте именно так писать, это принято в среде AutoIt'а. »
я не к тому, что этот подход мне непривычен вообще, логику в этом я вижу, я имею в виду непривычно после того как я насмотрелся на свои переменные, без всяких префиксов :)

Creat0R
28-08-2009, 11:08
так я про то и говорю »
Где?:

Отсюда я делаю вывод, что вся медленность действительно была в поиске по расширениям через массивы, и возможно из-за filewriteline вместо filewrite с возвратом каретки в конце. »
;)

я имею в виду непривычно после того как я насмотрелся на свои переменные, без всяких префиксов »
Префиксы там были своего рода, но очень смутные, не понять для чего служит какая переменная.

kaster
28-08-2009, 11:13
Где?: »
Там же :biggrin:
Отсюда я делаю вывод, что вся медленность действительно была в поиске по расширениям через массивы, и возможно из-за filewriteline вместо filewrite с возвратом каретки в конце. »

Префиксы там были своего рода, но очень смутные, не понять для чего служит какая переменная. »
они были далеко не по этим причинам.
вобщем, я понял, возьму на вооружение ;)

amel27
28-08-2009, 11:19
Кстати работает он гораздо быстрее чем наши с Creat0R'ом скрипты »на то они и бинарники :)

kaster
28-08-2009, 12:42
кстати, Creat0R, условие @extended при проверке на корень диска почему то не работает должным образом.
если поставить условие которые было у меня все норм. можешь проверить :)

Creat0R
28-08-2009, 16:19
условие @extended при проверке на корень диска почему то не работает должным образом »
Да, я не был уверен для чего оно :)

Исправил:

$sRoot_Name = ''

If StringRight($sRoot, 2) = ':\' Then
$sRoot_Name = 'Disk ' & StringTrimRight($sRoot, 2)
Else
$sRoot_Name = StringRegExpReplace($sRoot, '^.*\\', '')
EndIf

kaster
05-09-2009, 14:09
смотрим шапку

SyDr
05-09-2009, 17:48
Повторить описанный в шапке баг не удалось))) Зато другое вылезло:
http://pic.ipicture.ru/uploads/090905/thumbs/7Sq32eri7T.png (http://ipicture.ru/Gallery/Viewfull/23264585.html)

Упс... Моя виноват. Забыл, что это в именах файлов подчеркивания)))
Но такого бага, как в шапке не наблюдаю. Можно структуру папки?

kaster
05-09-2009, 20:49
Но такого бага, как в шапке не наблюдаю. Можно структуру папки? »
не совсем понял. какую структуру? ту что вызывает баг?
возьми любую папку с подпапками, но без файлов, в самих подпапках файлы могут быть. пример в аттаче

kaster
05-09-2009, 23:55
смотрим шапку (добавил favicon)

MikeLMB
30-05-2021, 21:04
Добрый день, а как дополнить программу выводом размера и/или даты изменения файла?




© OSzone.net 2001-2012