Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Длинные имена файлов под ДОС, Сабж - это реально? 
:(
    Опции темы
Shuricksoft
Дата 16.6.2003, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 27.3.2002
Где: Odessa, Ukraine




Собственно, сабж. Хотелось бы написать прогу под ДОС, которая бы видела длинные имена файлов. Насколько это реально? Где можно почитать о длинных именах?
PM MAIL ICQ   Вверх
Master
Дата 17.6.2003, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1530
Регистрация: 13.5.2003
Где: Mother Russia




В пакете DOS, есть утилита copy32.exe, но это для копирования.


--------------------
Вавилон, Вавилон
Что ты построил, что разрушил?
Вавилон, Вавилон
Плавятся души дьявольским огнем.
PM WWW ICQ   Вверх
DENNN
Дата 17.6.2003, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва




Давай немного разберемся. Уже под Win95 отдельно ДОСа нет - он теперь часть виндов. И он абсолютно корректно работает с длинными именами файлов.
Код

cd "c:\program files\microsoft visual studio\"

Можешь начинать писать обычное консольное приложениеsmile.gif
PM ICQ   Вверх
Chingachguk
Дата 17.6.2003, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва




Цитата

--------D-2171-------------------------------
INT 21 - Windows95 - LONG FILENAME FUNCTIONS
AH = 71h
AL = function
    0Dh reset drive (see AX=710Dh)
    39h create directory (see AX=7139h)
    3Ah remove directory (see AX=713Ah)
    3Bh set current directory (see AX=713Bh)
    41h delete file (see AX=7141h)
    43h get/set file attributes (see AX=7143h)
    47h get current directory (see AX=7147h)
    4Eh find first file (see AX=714Eh)
    4Fh find next file (see AX=714Fh)
    56h move (rename) file (see AX=7156h)
    60h truename (see AX=7160h/CL=00h,AX=7160h/CL=02h)
    6Ch create/open file (see AX=716Ch)
    A0h get volume information (see AX=71A0h)
    A1h terminate FindFirst/FindNext (see AX=71A1h)
    A6h get file information (see AX=71A6h)
    A7h time conversion (see AX=71A7h/BL=00h,AX=71A7h/BL=01h)
    A8h generate short filename (see AX=71A8h)
    A9h server create/open file (see AX=71A9h)
    AAh create/terminate SUBST (see AX=71AAh/BH=00h,AX=71AAh/BH=02h)
Return: CF set on error
    AX = error code (see #01680)
  7100h if function not supported
CF clear if successful
    other registers as for corresponding "old" DOS function
Notes: if error 7100h is returned, the old-style function should be called
AX=714Eh returns a "search handle" which must be passed to AX=714Fh;
  when the search is complete, AX=71A1h must be called to terminate
  the search
for compatibility with DOS versions prior to v7.00, the carry flag
  should be set on call to ensure that it is set on exit
Caldera's DPMS-enabled LONGNAME.EXE BETA 1 extension for DR-DOS 7
  supports the following sub-set of LFN functions: 39h, 3Ah, 3Bh, 41h,
  43h (BL = 0, 1 only), 47h, 4Eh, 4Fh, 56h, 60h (CL = 0, 1, 2), 6Ch,
  A0h, A1h, A8h. BETA 2 fixes LFN directory entry checksums, which
  were causing wrong LFNs to be attached to a file. The 8.3 short
  names for filenames with exactly 8 chars are no longer abbreviated
  (e.g. LONGNAME.TXT -> LONGNAME.TXT, not LONGNA~1.TXT). BETA 3 has
  A7h (BL=0, 1) functions added, and 4Eh/4Fh can return file times
  in both DOS and 64 bit formats, BETA 4 has support added for
  Caldera's DRFAT32 redirector extension (see INT 2F/AX=15xxh).
Caldera's DR-OpenDOS 7.02+ COMMAND.COM utilizes the LFN API as soon
  as it detects it (mind, that LONGNAME.EXE can be dynamically loaded
  and unloaded at runtime). This COMMAND.COM shell also works under
  MS-DOS/PC DOS and in DOS boxes of Windows9x, NT, 2000, and OS/2.
For 4DOS 6.02+ to work with 3rd party LFN providers, the Win95LFN=Yes
  directive should be inserted into the 4DOS.INI file.
Mike Podanoffsky's RxDOS 7.2 provides most of this API natively,
  including functions 39h, 3Ah, 3Bh, 41h, 43h (BL = confused.gif), 47h, 4Bh,
  4Eh, 4Fh, 56h, 60h (CL = 0, 1, 2, no CH), 6Ch, A0h, A1h and A7h.
  However, not all sub-functions seem to be supported yet.
SeeAlso: AH=39h,AH=3Ah,AH=3Bh,AH=41h,AX=4300h,AX=4301h,AX=4304h,AX=4306h
SeeAlso: AX=4307h,AH=47h,AH=4Eh,AH=4Fh,AH=56h,AH=6Ch,AX=714Eh,AX=714Fh



--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Chingachguk
Дата 17.6.2003, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва




Цитата

text segment byte
assume cs:text,ds:text
org 100h
begin:
  mov  ah,09h
  mov  dx,offset Message
  int  21h
; INT 21 - Windows95 - LONG FILENAME - MAKE DIRECTORY
; AX = 7139h
; DS:DX -> ASCIZ long directory name (including path)

  mov  ax,7139h
  mov  dx,offset LogFileName ; DS:DX - имя файла
  int  21h                  ; создать/открыть файл
  jc  @@LogOpenErr
  mov  bx,ax
  mov  ah,3Eh
  int  21h
  ret
@@LogOpenErr:
  mov  ah,09h
  mov  dx,offset NotCreated
  int  21h
  ret
Message db 'test',13,10,'$'
NotCreated db 'Not Created !',13,10,'$'
LogFileName db 'my_file_with_big_name.my_extension',0
text ends
end begin



--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Shuricksoft
Дата 17.6.2003, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 27.3.2002
Где: Odessa, Ukraine




Цитата
В пакете DOS, есть утилита copy32.exe, но это для копирования.

Мне не копировать надо, а просто интересует тема.
Цитата
Уже под Win95 отдельно ДОСа нет

Я имел в виду именно ДОС. Например, 6.22.
Цитата
И он абсолютно корректно работает с длинными именами файлов

Позволь с тобой не согласиться. Корректно он работает только под Виндоусом в ДОСовском окошке. А вот в "режиме эмуляции" - нифига.
To Chingachguk: Спасибо за описание и код! Только вот беда: он тоже не канает под ДОСом и в режиме эмуляции.
Ещё какие-нибудь предложения? Кто-нибудь знает, как эти имена туда физически записываются?
PM MAIL ICQ   Вверх
Chingachguk
Дата 17.6.2003, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва




Цитата

Кто-нибудь знает, как эти имена туда физически записываются?


Где-то я читал про это... То ли в Пирогове, то ли в Зубкове (более вероятно). Длинные имена в винде - это же надстройка (над фатом ?). В каком-то там описателе файла в этой ФАТ валяется признак, что имя - расширенное. Вроде бы этот признак - символ "~" или чего-то вроде того в конце обычного имени. Если винда натыкается на него (на признак), то ломится куда-то в свою дополнительную область данных и читает все остальное...


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Chingachguk
Дата 17.6.2003, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва




Да и инфы много. Называется это VFAT:

Цитата

3. DOS FAT 12/16/32, VFAT


3.1 VFAT: Long filenames
Windows 95/98 and Windows NT/2000 store long filenames on FAT in special directory entries with set attributes ReadOnly, Hidden, System and Volume, so if you access FAT volume from DOS you don't see these "files". These special entries have this mad structure:


byte              sequence number for slot
string(10)        first 5 characters in name
byte              attribute byte
byte              always 0
byte              checksum for 8.3 alias
string(12)        6 more characters in name
word              starting cluster number, 0 in long slots
string(4)        last 2 characters in name

Problem occur when you delete or modify file with long name from system without VFAT support, because only DOS 8+3 entry will be deleted or modified. Scandisk from Windows 95/98 can repair this problem



--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Shuricksoft
Дата 8.7.2003, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 27.3.2002
Где: Odessa, Ukraine




Сенкс. Только непонятно: так можно ли из чистого ДОСа получить доступ к этомк самому "специальному каталогу" (то есть, прочитать длинные имена)? Если да, то как?
PM MAIL ICQ   Вверх
p0s0l
Дата 14.7.2003, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.




То что это сделать можно - это 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 www.winhex.com
В ней ты можешь посмотреть кишки винта, прога работает напрямую с диском. Открой в ней какой-нибудь каталог и ты все поймешь.

Ну и потом останется тебе только написать прогу под дос с использованием int 13 или int 25.
Ну это уже другая тема...




--------------------
С уважением, г-н Посол.
PM   Вверх
kruchinin
Дата 14.7.2003, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 19.4.2003




Я сколько ни пробовал - ни одна программа не позволяет это делать под DOS.
Старые WinRar позволяют архивировать для DOSа длинные имена файлов.
Они даже видятся при просмотре, но при разархивации получаются урезанные до 8 символов.

Так я думаю стандартными функциями ДОС ты этого не добьешься, тебе надо лезть в FAT, и я думаю , что игра не стоит свеч
PM MAIL   Вверх
p0s0l
Дата 15.7.2003, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.




Да, чтобы прочитать каталог, придется последовательно узнавать номера кластеров каталога из FAT.
Только в этом ничего страшного нет.



--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила раздела «Флейм»
Sneg0k

Добро пожаловать в «Флейм».

В разделе не действуют многие правила:

  • Можно оффтопить(умеренно)
  • Можно общаться на темы, не только связанные с программированием.

Строго запрещено:

  • Размещать рекламу
  • Обсуждать политику
  • Оскорблять друг-друга и переходить на личности
  • Наезжать, провоцировать других участников форума
  • Материться
  • Троллить

Напоминаем о существовании волшебной кнопочки "Репорт". Если вы увидели сообщение, несовместимое с жизнью, просьба подвести на нее курсор и клацнуть левой клавишей мышки. Тем самым вы сможете призвать злого, но жутко справедливого джина-модератора, который нашлет порчу на злостного нарушителя. Кстати - счётчик сообщений здесь не растёт.


Глас Винграда:


Глас Философии:


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Sneg0k

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Флейм | Следующая тема »


 




[ Время генерации скрипта: 0.0845 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.