Notes |
|
|
Не совсем. Нужно просто различать имя тайла и имя файла в котором тайл находится. Я об этом как-то не подумал раньше. А смысла плодить новые разделители ИМХО нет. |
|
|
|
>надо сделать каким-то другим
Надо бы конечно. С точки зрения имён объектов в кэше саса это вторичное пространство имён, и при разборе ссылки всегда должна быть понятна точка перехода в него. В частности, в ядре WinNT вторичное пространство имён - это реестр и файловая система, ссылку на объекты во вторичном пространстве имён никогда не спутаешь на обычные ссылки на объекты (не пишу про имя объекта, потому что формально с точки зрения ядра NT файл - не именованный объект).
Вот только хороший разделитель не придумать. Голосую за двойной слеш (точнее, повторение первого слеша, если он в другую сторону направлен), обработать его нахождение в строке будет проще всего, а о неустранимых недостатках говорить (без наличия драйвера режима ядра, который бы позволял входить в файлы BDB как в обычные папки) пока рано. Может конечно я чего и не догоняю, и надо делать вставку \??\, но не во всех файловых системах нельзя писать ? в именах файлов. |
|
|
(0005011)
|
Tolik
|
16-01-2012 11:20
|
|
Всё равно эта строка не является путём к файлу, так что можно использовать любой разделитель, хоть ::, хоть |. Но можно и не менять, если это вызовет какие-то трудности. |
|
|
|
Я веду к тому что просто нет смысла парсить, то что мы сами формируем. А раз так то нет смысла вводить отдельные разделители. Вон в том же Total Commander после входа в архив путь в заголовке показывается "c:\Downloads\JNXLib.rar\samples\" и ничего. Лично мне нравится. Так что нужно просто что бы сам САС формировал правильный путь для открытия папки, где лежит файл в виде C:\ut\SASPlanet.Nightly\cache_db\yanarodscheme\z13\2\1\9.5.sdb
А вот если его просят скопировать имя тайла в буфер, то уже можно сгенерить полный путь C:\ut\SASPlanet.Nightly\cache_db\yanarodscheme\z13\2\1\9.5.sdb\x2472\y1282.png А уж пользователь пусть разбирается что это за контейнер.
Ведь можно же сделать и zip контейнеры с группировкой, например по 256 тайлов, а в них нынче даже винда заходит как в папки, не говоря уже о Total Commander и тд. |
|
|
(0005013)
|
Tolik
|
16-01-2012 11:48
|
|
Согласен, что нет смысла парсить. Я имел в виду разделитель, визуально понятный. Читабельный. Но я не настаиваю. |
|
|
|
>Всё равно эта строка не является путём к файлу
Проблема в том, то она МОЖЕТ быть путём к файлу.
Дело в том, что вообще говоря не понятно, JNXLib.rar это файл или настоящая папка. Причём в случае саса в строке C:\ut\SASPlanet.Nightly\cache_db\yanarodscheme\z13\2\1\9.5.sdb\x2472\y1282.png всё что после "yanarodscheme" сас создаёт уже исключительно самостоятельно, без участия пользователя. То есть неискушённый юзер совершенно может быть не в курсе, папка это (допускающая дальнейший разбор) или файл (следствие вольного формирования имени), и можно легко прогнозировать дальнейшие непонятки вида "почему не открывается". А в формировании пути к тайлам хотелось бы полностью исключить возможности двоякого толкования.
Вот если будет формирование перечня тайлов для скачки внешней тулзой - она уже не сможет понять автоматически тип кэша и куда что складывать, ведь нельзя заранее предполагать невозможность скачивания только одного зума (без z13) - соответственно тулза настраивается на один зум - и обламывается в создании папки 9.5.sdb.
Или что ещё важно - после скачки - заведомо невозможно будет сохранить тайл на диске либо корректно обработать ошибку сохранения, имея только сам тайл и его полный путь. Если файла sdb нет, будет создана папка со всеми вытекающими.
То есть конечно можно решать проблемы по мере из возникновения, но ещё проще не создавать проблемы минимальной доработкой. Да даже в ForceDirectories скормить такой путь может оказаться весьма неприятным, а автономно (без дополнительной логики обработки ".sdb", причём ТОЛЬКО для кэша беркли) его не "вычистить". |
|
|
(0005018)
|
Garl
|
16-01-2012 17:01
(edited on: 16-01-2012 17:02) |
|
я сразу предлагал юзать : как разделитель.
C:\ut\SASPlanet.Nightly\cache_db\yanarodscheme\z13\2\1\9.5.sdb:x2472\y1282.png
или как вариант :\
C:\ut\SASPlanet.Nightly\cache_db\yanarodscheme\z13\2\1\9.5.sdb:\x2472\y1282.png
|
|
|
|
Двоеточие юзается в качестве разделителя для файловых потоков на NTFS. Нельзя двоеточие. |
|
|
(0005217)
|
zed
|
25-01-2012 08:53
|
|
Так как в итоге решать эту багу? Добавить ещё один метод в хранилище, по которому отдавать имя контейнера или что? |
|
|
(0005218)
|
Garl
|
25-01-2012 08:55
|
|
по мне: так можно и оставить как есть сейчас. |
|
|
|
Какие вообще в перспективе возможны тайлохранилища:
1. Папка в которой по папкам раскиданы файлы. 1 тайл в 1 файле. (То что есть уже давно)
2. Папка в которой по папкам раскиданы контейнеры. N тайлов в 1 файле. (Текущая реализация с БерклиДБ)
3. Папка в которой лежит большой контейнер. Все тайлы в 1 файле. (Например на базе SQLite)
4. База на сервере БД, сервере приложений или еще что-то.
Какие еще варианты? Я больше придумать не могу.
Поэтому для унификации предлагаю и в 4-м случае сделать папку, в которой хранить например файлик с параметрами подключения к базе и тд.
Получается что папка всегда есть. |
|
|
|
Тоесть нужно сделать метод у тайлохранилища, который будет всегда отдавать максимально полный путь к месту где хранится тайл. В 1-м случае это будет сам файл с тайлом.
Во 2-м и 3-м это файл контейнера.
В 4-м это файл с параметрами подключения к базе. |
|