|
|
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
Никто не встречался с такой проблемой как, вытягивание имён файлов под DOS ? стандартные функции (findfirst, findnext с dir.h) получают имена файлов формата 8+3 т.е обрезает имя и вставляет тильду (STARCR~1.exe)... как получить полное имя? помогите плз или дайте ссылку на лит-ру где обьясняется процес получения имени с фат среда разработки borland cpp 3.11 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2005, 03:43 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
ГадёнышНикто не встречался с такой проблемой как, вытягивание имён файлов под DOS ? стандартные функции (findfirst, findnext с dir.h) получают имена файлов формата 8+3 т.е обрезает имя и вставляет тильду (STARCR~1.exe)... как получить полное имя? помогите плз или дайте ссылку на лит-ру где обьясняется процес получения имени с фат среда разработки borland cpp 3.11 Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2005, 10:37 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
Не пойдёт... такой функции у мну нет, возможно это с билдера... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2005, 18:09 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
FindFirstFile(). Функция WinAPI. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2005, 20:10 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
Есть такие две SDK функции FindFirstFile FindNextFile С их помощью, можно узнать много полезного про файл. Я вот только не пробовал под досом. Но думаю, что если релиз запускать всё нормально будет. (Не уверен) Использовал под окнами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2005, 20:21 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
И как Вы планируете Win32 API вызовы в DOS использовать? :-) С borland cpp 3.11 - я так понимаю, что это будет 16bit dos прога Поищите, например в Гугле VFAT+long+name+DOS и будет Вам щастье! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2005, 00:47 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
--null--И как Вы планируете Win32 API вызовы в DOS использовать? :-) С borland cpp 3.11 - я так понимаю, что это будет 16bit dos прога Поищите, например в Гугле VFAT+long+name+DOS и будет Вам щастье! блин пролистал 53 страници в гугле, всё похоже, но.... наверно самому прийдётся разбиратся. если кто-нить найдёт как это сделать пжайлуста скиньте сюда. если сделаю сам раньше скину код сюда... пасиб всем за помощ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2005, 03:32 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
Времени много прошло, но кажется ДОС в принципе не поддерживает длинные имена, т.е. стандартной функции нет и быть не может. Если самому это писать, то можно получить жуткий гимор, хотя бы потому, что скорее всего придется делать поддержку всех файловых систем. Но это предположения, возможно, все проще. Видел прогу, какая работал с длинными именами под ДОС, это знаменитый "Волков коммандр" версии 5, но он так и остался на уровне альфа версии. Кстати, представить зачем сейчас нужна ДОС могу, но вот зачем нужна там поддержка длинных имен, не представляю. В ДОСе еще нет многозадачности и еще много чего, т.е. не самому же все это писать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2005, 12:27 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
Если это задача не академическая, т.е. длинные имена действительно нужны и для дела, то возможно проще будет создать некий файл-справочник, где будет храниться соответствие короткого имени длинному, т.е. примерно то, что и реализовано в фат или изменить структуру разрабатываемой системы с файлами, но только не самому поддерживать длинные имена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2005, 12:31 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
Не уверен, но может вам стоит копнуть в сторону Win32s. Эта вещь предоставляет приложениями под DOS использовать часть функционала WinAPI. Была выпущена Microsoft давным-давно и благополучно предана забвению, как и сама DOS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2005, 12:59 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
homichus есть драйвера и у них есть соотвествующие API При чем там зависит от файловой системы - VFAT(Fat 16) или FAT32 это если говорить о DOS 6.x и прочих А если брать DOS 7.x и дальше - то там вроде есть для этого функции по-моему в int21 добавили ax=0x71, надо смотреть последние interrupt lists ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2005, 13:00 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
--null--homichus есть драйвера и у них есть соотвествующие API При чем там зависит от файловой системы - VFAT(Fat 16) или FAT32 это если говорить о DOS 6.x и прочих А если брать DOS 7.x и дальше - то там вроде есть для этого функции по-моему в int21 добавили ax=0x71, надо смотреть последние interrupt lists понятно, спасибо за информацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2005, 14:16 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
homichusЕсли это задача не академическая, т.е. длинные имена действительно нужны и для дела, то возможно проще будет создать некий файл-справочник, где будет храниться соответствие короткого имени длинному, т.е. примерно то, что и реализовано в фат или изменить структуру разрабатываемой системы с файлами, но только не самому поддерживать длинные имена. хорошо, но как этот файл создать... и ещё в ffblk структуре есть поле rezerved для чего оно? случайно не для разшифровки имени файла? а вообще я делаю файловый менеджер (курсач) и при копировании например, я нахожу файлы, записываю как чар в свой класс, потом создаю новый файл, по указаному пути, но так как имя берётся с переменной типо чар, а оно при поиске может быть и с тильдой, новый файл тоже создаётся с тильдой если есть способы лутше, скажите плз... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2005, 17:01 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
IMHO 2 Гадёныш: большинство DOS файлменеджеров именно так жестоко и поступают с длинными именами, преобразуя их в тильду Поэтому Вы не должны иметь чуйство вины, если Ваш менеджер будет поступать так же. А если хочется в этом разобраться - то надо делать курсовик "драйвер VFAT для MS DOS 6.x", а не про файлменеджер :-) Ибо насколько я понимаю тут халявы не предвидится: я так помню, что длинное имя в VFAT хранится как запись каталога, причем каждая запись не длиннее 13 символов (как классическое имя fat), поэтому все это надо считать и склеить. надо еще учесть, что VFAT различает регистр символов внутри себя. Исходя из этого - надо будет работать с таблицей fat напрямую, т.е. считывать записи прямо из каталогов например через то же Int21. а при создании(копировании) файла - производить там такие же изменения - создавать дополнительные записи в каталоге и тп. Придется всю спецификацию VFAT просмотреть. А как этот геморрой будет работать например в режиме эмуляции из-под настоящей винды - вообще хер знает :-) Есть подозрение, что все заглюкает :-) И не факт, что для FAT32 не придется делать отдельно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2005, 18:18 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
Гадёныш а вообще я делаю файловый менеджер (курсач) и при копировании например, я нахожу файлы, записываю как чар в свой класс, потом создаю новый файл, по указаному пути, но так как имя берётся с переменной типо чар, а оно при поиске может быть и с тильдой, новый файл тоже создаётся с тильдой если есть способы лутше, скажите плз... Собсно, я сразу написал: homichusЕсли это задача не академическая, , а она чисто академическая и все мои рассуждения мгновенно разрушились:) О структуре фата ничего не скажу, т.к. имею только общие представления, но эта структура хорошо документирована, нужно только немного поискать... Если в задаче менеджер под чистый ДОС и с условием "Копирование файлов с длинными именами", то имхо лучший путь, это сказанный -null-ом. Но если задача именно разобраться со структурой файловых систем, то тут ничего не сделаешь и нужно искать описание фс и уже с ним работать. А может быть все проще, и можно использовать win32, или можно обрезать имена файлов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2005, 19:27 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
очень много описаний фата есть в книгах того времени, часть из них есть в электронном виде. Но думаю проще сходить в библиотеку. помню у меня была книжка некого фаронова про туробопаскаль, так там вообще описывалось как создать нестандартный сектор на диске. мого было таких книг, очень много. это сейчас все общаются на уровне абстракций типа вин апи или вообще КОМа, а тогда все пытались добраться чуть ли не до транзисторов в процессоре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2005, 19:43 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
homichusочень много описаний фата есть в книгах того времени, часть из них есть в электронном виде. Но думаю проще сходить в библиотеку. помню у меня была книжка некого фаронова про туробопаскаль, так там вообще описывалось как создать нестандартный сектор на диске. мого было таких книг, очень много. это сейчас все общаются на уровне абстракций типа вин апи или вообще КОМа, а тогда все пытались добраться чуть ли не до транзисторов в процессоре. только сейчас дошло, что длинные имена широко начали применяться уже ближе к концу "того времени":) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2005, 19:46 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
не ну я конечно понимаю, но чё такое char ff_rezerved[21] - rezerved by DOS в структуре ffblk чё оно резервирует.. воть http://www.microsoft.com/whdc/syste...are/fatgen.mspx линк инфы по ДОСу буду разбираться... чё такое int21? int86 - прерывания ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2005, 20:07 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
Гадёнышне ну я конечно понимаю, но чё такое char ff_rezerved[21] - rezerved by DOS в структуре ffblk чё оно резервирует.. воть http://www.microsoft.com/whdc/syste...are/fatgen.mspx линк инфы по ДОСу буду разбираться... чё такое int21? int86 - прерывания http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2005, 20:08 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
Гадёныш , что бы это чудо не резервировало (char ff_rezerved[21]), это к длинным именам отношения не имеет. Во-первых, по стандарту длинные имена в VFat - до 255 символов, а во-вторых - части длинного имени действительно хранятся в VFat так, как я написал раньше - в виде "псеводфайлов", то есть записей в каталогах. Это можно даже поисследовать - возьмите старенький Norton Disk Editor (запускать под DOS!) и посмотрите на VFat разделе длинные имена. Статьи про FAT с тех самых "давних времен" еще можно найти в инете, можно начать со старого доброго citforum-а. Int 21 - это функции DOS в виде программных прерываний, в том числе по обращению к внешним устройствам, Вам помогут функции чтения/записи секторов. Это еще умеет int13, но я думаю такой низкий уровень будет не нужен :-) В DOS есть и функция чтения каталога (int21 ax=0x4e), но не знаю, как она отнесется к длинным именам. Если удастся получить с ее помощью кусочки длинного имени - будет вообще легко тогда. Хотя маловероятно - на то она и DOS... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2005, 22:29 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
The Basis-Name Generation Algorithm 1. The UNICODE name passed to the file system is converted to upper case. 2. The upper cased UNICODE name is converted to OEM. if (the uppercased UNICODE glyph does not exist as an OEM glyph in the OEM code page) or (the OEM glyph is invalid in an 8.3 name) { Replace the glyph to an OEM '_' (underscore) character. Set a "lossy conversion" flag. } 3. Strip all leading and embedded spaces from the long name. 4. Strip all leading periods from the long name. 5. While (not at end of the long name) and (char is not a period) and (total chars copied < 8) { Copy characters into primary portion of the basis name } 6. Insert a dot at the end of the primary components of the basis-name iff the basis name has an extension after the last period in the name. 7. Scan for the last embedded period in the long name. If (the last embedded period was found) { While (not at end of the long name) and (total chars copied < 3) { Copy characters into extension portion of the basis name } } воть чё я нашёл... токо какое прерывание отвечает за фат? мож кто нает? терь я знаю, что я ничего не знаю.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2005, 01:43 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
Подолью масла в огонь (обратите внимание, это NC - ДОСовский, выделенное имя - короткое, как и полагается, а внизу описание - длинное): ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2005, 06:54 |
|
||
|
Имена файлов
|
|||
|---|---|---|---|
|
#18+
вот-вот, имя файла-то он считывает. А насчет записи - это вряд ли? Давно Norton не юзал, не помню уже :-) автор токо какое прерывание отвечает за фат? мож кто нает? думаю, что никакое - надо юзать стандартные функции int21 ии int13 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2005, 09:29 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33415930&tid=2032352]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 370ms |

| 0 / 0 |
