Карта каталогов
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.37] |
|
|
правила раздела Алгоритмы

Карта каталогов
|
Сообщ.
#1
,
|
|
|
|
подскажите как хранить в одном файле дерево каталогов. имеется папка с множеством вложенностей, нужно создать карту для ускорения работы. вот.
|
|
Сообщ.
#2
,
|
|
|
|
А чего конкретно ускорять?
|
|
Сообщ.
#3
,
|
|
|
|
мнго раз по винту чтобы не шарить, по каждому файлу будет инфа описание и где искать.
|
|
Сообщ.
#4
,
|
|
|
|
Не, все равно не понял. Что ты собрался хранить и что искать?
В принципе существует два способа ускорения, первый - разработать структуру так, что бы за минимальное число операций выбрать нужный тебе узел. И второй - хранить как удобнее и дополнительно строить индексы. Что тебе подходит? |
|
Сообщ.
#5
,
|
|
|
|
вообще мне нужно создать файл в котором будет дерефо всех (например) ниже стоящих папок. и загрузив этот файл я буду управлять файлами в этих папках. во.
(я еще тут) |
|
Сообщ.
#6
,
|
|
|
|
Ну так пиши подряд, прям как Windows Commander.
Типа того: [Winnt] [Winnt\$ntuninstallq285156$] [Winnt\addins] [Winnt\Apppatch] [Winnt\Config] [Winnt\Connection Wizard] [Winnt\Csc] [Winnt\Csc\d1] [Winnt\Csc\d2] [Winnt\Csc\d3] [Winnt\Csc\d4] [Winnt\Csc\d5] [Winnt\Csc\d6] [Winnt\Csc\d7] [Winnt\Csc\d8] [Winnt\Cursors] [Winnt\Debug] [Winnt\Debug\Usermode] [Winnt\Downloaded Program Files] [Winnt\Driver Cache] [Winnt\Driver Cache\i386] [Winnt\Fonts] [Winnt\Help] |
|
Сообщ.
#7
,
|
|
|
|
а как отображать?
| |- ||- ||- |- ||- ||- |
|
Сообщ.
#8
,
|
|
|
|
я слышал можно как-то по уровням записывать, а то представь: первый уровень 5 ветвей а второй например 500, и перебирать все?
|
|
Сообщ.
#9
,
|
|
|
|
посмотри может это поможет тебе
http://harbour.narod.ru/Files/Work/CPPC/CTask12/Graphs.htm |
|
Сообщ.
#10
,
|
|
|
|
Можно перед строкой записывать уровень. Если эта строка - лист дерева, то бишь больше нет подуровней, то еще какой-нибудь символ записывать. Вобщем могу тебе сказать, что как бы ты это не записывал - парсить файл все равно во много раз быстрее, чем сканировать фолдеры.
Можешь вообще записывать объект в файл в бинарном виде, раз тебе все равно. Это еще быстрее. |
|
Сообщ.
#11
,
|
|
|
|
спасибо за советы, я еще подумаю, а сейчас пора спать.
|
|
Сообщ.
#12
,
|
|
|
|
Для начало дерево надо преобразовать в двоичное (кто не знает как, нет ему прощения)
Получится чтото типа struct TreeNode{ }; |
|
Сообщ.
#13
,
|
|
|
|
О, Глюк, Я нажал по привычке <TAB> перед вводом void*
Для начало дерево надо преобразовать в двоичное (кто не знает как, нет ему прощения) Получится чтото типа struct TreeNode{ void *data;//ну не надо здесь оставлять void* struct TreeNode *RightBrother, *LeftmostChild; }; А уж вопросы зранения ДВОИЧНОГО дерева в файле обсосаны со всех сторон со всевозможными оптимизациями итд ипр бла-бла-бла |
|
Сообщ.
#14
,
|
|
|
|
Палки в начале строки можно рисовать так: хранишь в узле две величины. Первая - массив нужной длинны в битах(!), размерностью в максимальное вложение, вторая - глубина. В массиве: 1 - есть палка, 0 - нет. Тип палки тоже очень просто определить, если номер бита не совпадает с глубиной, то палка "прямая" - код 179, иначе - либо Т-образная либо Г-образная. Далее, если в следующем (не по порядку, а по строке) узле данный бит зажжен, но Т-образная, если нет, то Г-образная.
Сумбурно, но разобраться, надеюсь, можно ;D |
|
Сообщ.
#15
,
|
|
|
|
Вообще не понимаю в чём проблема......
Вот твой массив строк: DOS WINDOWS WINDOWS\SYSTEM WINDOWS\COMMAND WINDOWS\FONTS UTILS UTILS\HIEW Далее просто пишешь в файл блоки: [байт уровня][байт длины имени][имя] Т.е. 13DOS17WINDOWS26SYSTEM27COMMAND25FONTS15UTILS14HIEW А собирать так.... 1 способ.... Создаёшь массив строк-уровней (МСУ) Читаешь первый байт (байт уровня - БУ), затем строку и записываешь в МСУ с индексом БУ, получаешь путь Path : For i := 1 to БУ do Path := Path + '\' + МСУ[i] 2 способ.... Читаешь первый байт (БУ) и строку (S). Если БУ = 1, то Path := S, иначе ищешь в Path (БУ-1)-й по счёту символ '\' и обрубаешь всё, что за ним, а затем Path := Path + S |