| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Флейм > Длинные имена файлов под ДОС |
| Автор: Shuricksoft 16.6.2003, 21:52 |
| Собственно, сабж. Хотелось бы написать прогу под ДОС, которая бы видела длинные имена файлов. Насколько это реально? Где можно почитать о длинных именах? |
| Автор: Master 17.6.2003, 09:39 |
| В пакете DOS, есть утилита copy32.exe, но это для копирования. |
| Автор: DENNN 17.6.2003, 10:52 | ||
Давай немного разберемся. Уже под Win95 отдельно ДОСа нет - он теперь часть виндов. И он абсолютно корректно работает с длинными именами файлов.
Можешь начинать писать обычное консольное приложение |
| Автор: Chingachguk 17.6.2003, 11:53 | ||
|
| Автор: Chingachguk 17.6.2003, 11:55 | ||
|
| Автор: Shuricksoft 17.6.2003, 15:19 | ||||||
Мне не копировать надо, а просто интересует тема.
Я имел в виду именно ДОС. Например, 6.22.
Позволь с тобой не согласиться. Корректно он работает только под Виндоусом в ДОСовском окошке. А вот в "режиме эмуляции" - нифига. To Chingachguk: Спасибо за описание и код! Только вот беда: он тоже не канает под ДОСом и в режиме эмуляции. Ещё какие-нибудь предложения? Кто-нибудь знает, как эти имена туда физически записываются? |
| Автор: Chingachguk 17.6.2003, 15:29 | ||
Где-то я читал про это... То ли в Пирогове, то ли в Зубкове (более вероятно). Длинные имена в винде - это же надстройка (над фатом ?). В каком-то там описателе файла в этой ФАТ валяется признак, что имя - расширенное. Вроде бы этот признак - символ "~" или чего-то вроде того в конце обычного имени. Если винда натыкается на него (на признак), то ломится куда-то в свою дополнительную область данных и читает все остальное... |
| Автор: Chingachguk 17.6.2003, 15:38 | ||
Да и инфы много. Называется это VFAT:
|
| Автор: Shuricksoft 8.7.2003, 14:02 |
| Сенкс. Только непонятно: так можно ли из чистого ДОСа получить доступ к этомк самому "специальному каталогу" (то есть, прочитать длинные имена)? Если да, то как? |
| Автор: p0s0l 14.7.2003, 01:10 |
| То что это сделать можно - это 100%, и это даже ОЧЕНЬ легко, но повозится придется. Длинные имена хранятся там же где и короткие, т.е. в каталоге, как обычные короткие имена, только с одним отличием - у них поставлены атрибуты sys+hid+readonly+volume, вроде. Флаг volume делает эти записи каталога бессмысленными. Поэтому dos такие записи пропускает. Каждому короткому имени может соответствовать несколько записей длинного имени. например, длинное имя = abcdefghijklmnopqrstuvxyz. Тогда в каталоге будут записи с такими именами: .n.o.p.q.r....s. t.u.v.x.y...z... .a.b.c.d.e....f. g.h.i.j.k...l.m. ABCDEF~1 .... ................ Длинные имена хранятся в виде WideString (символ = 2 байта). Как написал Chingachquk, для поддержания целостности введены порядковый номер и контрольная сумма (считается от короткого имени). Блин, ну тут много можно написать, но лучше будет если ты скачаешь кульную прогу WinHex http://www.winhex.com В ней ты можешь посмотреть кишки винта, прога работает напрямую с диском. Открой в ней какой-нибудь каталог и ты все поймешь. Ну и потом останется тебе только написать прогу под дос с использованием int 13 или int 25. Ну это уже другая тема... |
| Автор: kruchinin 14.7.2003, 18:09 |
| Я сколько ни пробовал - ни одна программа не позволяет это делать под DOS. Старые WinRar позволяют архивировать для DOSа длинные имена файлов. Они даже видятся при просмотре, но при разархивации получаются урезанные до 8 символов. Так я думаю стандартными функциями ДОС ты этого не добьешься, тебе надо лезть в FAT, и я думаю , что игра не стоит свеч |
| Автор: p0s0l 15.7.2003, 15:18 |
| Да, чтобы прочитать каталог, придется последовательно узнавать номера кластеров каталога из FAT. Только в этом ничего страшного нет. |