Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Длинное и короткое имя файла в одном флаконе. :)


Riply ©   (2007-07-07 10:33:00) 

Здравствуйте !
Допустим у нас есть имя файла в юникоде
(без пути): wFileName: array[0..Pred(NameLen)] of WideChar;
Задача: изменив в массиве wFileName минимум байт (позиция любая, размер NameLen менять нельзя)
ухитриться сохранить в нем и длинное и короткое имя файла.
Т.е результат должен быть таким: по нашему желанию из измененного wFileName,
мы можем получить либо длинное, либо короткое имя.
Это реально т.к. на символы, используемые в реальном имни файла есть ограничения,
а при внесении изменеий их нет. Например: если третий символ - #9 или \ (имя без пути),
то мы знаем, что это наш символ.
Он может нести информацию о том что было в своем значении и в своей позиции.
P.S.
Пытаюсь в этом разобраться потому, что есть основания полагать,
что Microsoft иногда использует подобный алгоритм, для хранения имен файлов.
Конечная цель: воссоздать Microsoft - кий алгоритм.
А, может он у кого-то уже есть ? :)


Riply   (2007-07-07 23:22:00) [1]

>[0] Riply ©   (07.07.07 10:33)
>Пытаюсь в этом разобраться потому, что есть основания полагать,
>что Microsoft иногда использует подобный алгоритм, для хранения имен файлов.
Оказалось, что все это фантазии от безнадежных попыток найти ошибку :)
P.S.
Собака порылась совсем в другом месте :)


Riply   (2007-07-07 10:54:00) [2]

> [1] Anatoly Podgoretsky ©   (07.07.07 10:40)
>Если имя можно предствить в ANSI то задача простая
>ANSI Long | separator | ANSI Short | Null terminator
Спасибо. Могла бы и сама сообразить. Думать разленилась :)
Дело еще и вот в чем:
Из некоторых структур MFT, я вытаскиваю "измененные" юникод-имена.
Внешне изменения не похожи на, предложенный Вами вариант.
При переводе такого имени в ANSI, один символ (чтобы было два не встречала)
изменен. Примеры (пути добавлены мной):
D:\ATI\atidesk\FACCES\x13.DLL
D:\Dissertation Kraft\Off_Docs\Вы\x12иска НТС.doc
D:\FdlNew\Dual files\Du\x11l69a.int
D:\FdlNew\INP Files\defaul\x10.inp
D:\Mathematics\Color\CiteSeDr\liu93multiresolution.p\x10f
D:\Mathematics\Numerical Methods\LS\x10DEMO.PAS
D:\Mathematics\Numerical Methods\SAMPLE6D.D\x10T
D:\Mathematics\Numerical Methods\SA\x10PLE3F.DAT
D:\Text\Electronical report 2005\Primary_Image.\x11mp
Я хочу научиться извлекать отсюда "правильные" имена по "Microsoft-овски" :)


Anatoly Podgoretsky   (2007-07-07 10:43:00) [3]

По другому - поскольку WideChar занимает два байта, то надо преобразовать в однобайтовые кодировки, что и позволит хранить два имени + разделитель.


Anatoly Podgoretsky   (2007-07-07 10:40:00) [4]

> Riply  (07.07.2007 10:33:00)  [0]

Если имя можно предствить в ANSI то задача простая

ANSI Long | separator | ANSI Short | Null terminator

При этом не важна длина Wide - всегда получается.

А вот если нельзя в ANSI то задача решения не имеет, если не брать в расчет методы используемые в архиваторах


Наверх

Титульная страница Поиск, карта сайта Написать письмо