Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Имена файлов / 23 сообщений из 23, страница 1 из 1
03.12.2005, 03:43
    #33415112
Гадёныш
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
Никто не встречался с такой проблемой как, вытягивание имён файлов под DOS ?

стандартные функции (findfirst, findnext с dir.h)
получают имена файлов формата 8+3 т.е обрезает имя и вставляет тильду (STARCR~1.exe)...
как получить полное имя?
помогите плз или дайте ссылку на лит-ру где обьясняется процес получения имени с фат

среда разработки borland cpp 3.11
...
Рейтинг: 0 / 0
03.12.2005, 10:37
    #33415156
Ramin Hashimzade
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
ГадёнышНикто не встречался с такой проблемой как, вытягивание имён файлов под DOS ?

стандартные функции (findfirst, findnext с dir.h)
получают имена файлов формата 8+3 т.е обрезает имя и вставляет тильду (STARCR~1.exe)...
как получить полное имя?
помогите плз или дайте ссылку на лит-ру где обьясняется процес получения имени с фат

среда разработки borland cpp 3.11

Код: plaintext
ExtractFileName
...
Рейтинг: 0 / 0
03.12.2005, 18:09
    #33415453
Гадёныш
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
Не пойдёт...
такой функции у мну нет, возможно это с билдера...
...
Рейтинг: 0 / 0
03.12.2005, 20:10
    #33415528
roman10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
FindFirstFile(). Функция WinAPI.
...
Рейтинг: 0 / 0
03.12.2005, 20:21
    #33415537
Мишаааааааааааааааа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
Есть такие две SDK функции

FindFirstFile
FindNextFile

С их помощью, можно узнать много полезного про файл.

Я вот только не пробовал под досом. Но думаю, что если релиз запускать всё нормально будет. (Не уверен) Использовал под окнами.
...
Рейтинг: 0 / 0
04.12.2005, 00:47
    #33415690
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
И как Вы планируете Win32 API вызовы в DOS использовать? :-)

С borland cpp 3.11 - я так понимаю, что это будет 16bit dos прога

Поищите, например в Гугле

VFAT+long+name+DOS


и будет Вам щастье!
...
Рейтинг: 0 / 0
04.12.2005, 03:32
    #33415731
Гадёныш
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
--null--И как Вы планируете Win32 API вызовы в DOS использовать? :-)

С borland cpp 3.11 - я так понимаю, что это будет 16bit dos прога

Поищите, например в Гугле

VFAT+long+name+DOS


и будет Вам щастье!

блин пролистал 53 страници в гугле, всё похоже, но....

наверно самому прийдётся разбиратся.
если кто-нить найдёт как это сделать пжайлуста скиньте сюда.
если сделаю сам раньше скину код сюда...

пасиб всем за помощ!
...
Рейтинг: 0 / 0
04.12.2005, 12:27
    #33415772
homichus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
Времени много прошло, но кажется ДОС в принципе не поддерживает длинные имена, т.е. стандартной функции нет и быть не может. Если самому это писать, то можно получить жуткий гимор, хотя бы потому, что скорее всего придется делать поддержку всех файловых систем. Но это предположения, возможно, все проще.
Видел прогу, какая работал с длинными именами под ДОС, это знаменитый "Волков коммандр" версии 5, но он так и остался на уровне альфа версии.
Кстати, представить зачем сейчас нужна ДОС могу, но вот зачем нужна там поддержка длинных имен, не представляю. В ДОСе еще нет многозадачности и еще много чего, т.е. не самому же все это писать...
...
Рейтинг: 0 / 0
04.12.2005, 12:31
    #33415774
homichus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
Если это задача не академическая, т.е. длинные имена действительно нужны и для дела, то возможно проще будет создать некий файл-справочник, где будет храниться соответствие короткого имени длинному, т.е. примерно то, что и реализовано в фат или изменить структуру разрабатываемой системы с файлами, но только не самому поддерживать длинные имена.
...
Рейтинг: 0 / 0
04.12.2005, 12:59
    #33415783
roman10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
Не уверен, но может вам стоит копнуть в сторону Win32s. Эта вещь предоставляет приложениями под DOS использовать часть функционала WinAPI. Была выпущена Microsoft давным-давно и благополучно предана забвению, как и сама DOS.
...
Рейтинг: 0 / 0
04.12.2005, 13:00
    #33415784
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
homichus есть драйвера и у них есть соотвествующие API
При чем там зависит от файловой системы - VFAT(Fat 16) или FAT32
это если говорить о DOS 6.x и прочих

А если брать DOS 7.x и дальше - то там вроде есть для этого функции
по-моему в int21 добавили ax=0x71, надо смотреть последние interrupt lists
...
Рейтинг: 0 / 0
04.12.2005, 14:16
    #33415805
homichus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
--null--homichus есть драйвера и у них есть соотвествующие API
При чем там зависит от файловой системы - VFAT(Fat 16) или FAT32
это если говорить о DOS 6.x и прочих

А если брать DOS 7.x и дальше - то там вроде есть для этого функции
по-моему в int21 добавили ax=0x71, надо смотреть последние interrupt lists

понятно, спасибо за информацию.
...
Рейтинг: 0 / 0
04.12.2005, 17:01
    #33415930
Гадёныш
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
homichusЕсли это задача не академическая, т.е. длинные имена действительно нужны и для дела, то возможно проще будет создать некий файл-справочник, где будет храниться соответствие короткого имени длинному, т.е. примерно то, что и реализовано в фат или изменить структуру разрабатываемой системы с файлами, но только не самому поддерживать длинные имена.

хорошо, но как этот файл создать...

и ещё в ffblk структуре есть поле rezerved для чего оно? случайно не для разшифровки имени файла?

а вообще я делаю файловый менеджер (курсач) и при копировании например, я нахожу файлы, записываю как чар в свой класс, потом создаю новый файл, по указаному пути, но так как имя берётся с переменной типо чар, а оно при поиске может быть и с тильдой, новый файл тоже создаётся с тильдой

если есть способы лутше, скажите плз...
...
Рейтинг: 0 / 0
04.12.2005, 18:18
    #33415966
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
IMHO 2 Гадёныш:

большинство DOS файлменеджеров именно так жестоко и поступают
с длинными именами, преобразуя их в тильду
Поэтому Вы не должны иметь чуйство вины, если Ваш менеджер будет поступать так же.

А если хочется в этом разобраться - то надо делать курсовик "драйвер VFAT для MS DOS 6.x", а не про файлменеджер :-)
Ибо насколько я понимаю тут халявы не предвидится:
я так помню, что длинное имя в VFAT хранится как запись каталога, причем каждая запись не длиннее 13 символов (как классическое имя fat), поэтому все это надо считать и склеить.
надо еще учесть, что VFAT различает регистр символов внутри себя.
Исходя из этого - надо будет работать с таблицей fat напрямую, т.е. считывать записи прямо из каталогов например через то же Int21.
а при создании(копировании) файла - производить там такие же изменения - создавать дополнительные записи в каталоге и тп. Придется всю спецификацию VFAT просмотреть.
А как этот геморрой будет работать например в режиме эмуляции из-под настоящей винды - вообще хер знает :-) Есть подозрение, что все заглюкает :-)
И не факт, что для FAT32 не придется делать отдельно.
...
Рейтинг: 0 / 0
04.12.2005, 19:27
    #33416014
homichus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
Гадёныш
а вообще я делаю файловый менеджер (курсач) и при копировании например, я нахожу файлы, записываю как чар в свой класс, потом создаю новый файл, по указаному пути, но так как имя берётся с переменной типо чар, а оно при поиске может быть и с тильдой, новый файл тоже создаётся с тильдой

если есть способы лутше, скажите плз...


Собсно, я сразу написал: homichusЕсли это задача не академическая, , а она чисто академическая и все мои рассуждения мгновенно разрушились:)
О структуре фата ничего не скажу, т.к. имею только общие представления, но эта структура хорошо документирована, нужно только немного поискать...
Если в задаче менеджер под чистый ДОС и с условием "Копирование файлов с длинными именами", то имхо лучший путь, это сказанный -null-ом. Но если задача именно разобраться со структурой файловых систем, то тут ничего не сделаешь и нужно искать описание фс и уже с ним работать.
А может быть все проще, и можно использовать win32, или можно обрезать имена файлов...
...
Рейтинг: 0 / 0
04.12.2005, 19:43
    #33416021
homichus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
очень много описаний фата есть в книгах того времени, часть из них есть в электронном виде. Но думаю проще сходить в библиотеку.
помню у меня была книжка некого фаронова про туробопаскаль, так там вообще описывалось как создать нестандартный сектор на диске. мого было таких книг, очень много. это сейчас все общаются на уровне абстракций типа вин апи или вообще КОМа, а тогда все пытались добраться чуть ли не до транзисторов в процессоре.
...
Рейтинг: 0 / 0
04.12.2005, 19:46
    #33416024
homichus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
homichusочень много описаний фата есть в книгах того времени, часть из них есть в электронном виде. Но думаю проще сходить в библиотеку.
помню у меня была книжка некого фаронова про туробопаскаль, так там вообще описывалось как создать нестандартный сектор на диске. мого было таких книг, очень много. это сейчас все общаются на уровне абстракций типа вин апи или вообще КОМа, а тогда все пытались добраться чуть ли не до транзисторов в процессоре.

только сейчас дошло, что длинные имена широко начали применяться уже ближе к концу "того времени":)
...
Рейтинг: 0 / 0
04.12.2005, 20:07
    #33416038
Гадёныш
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
не ну я конечно понимаю, но чё такое char ff_rezerved[21] - rezerved by DOS в структуре ffblk
чё оно резервирует..

воть http://www.microsoft.com/whdc/syste...are/fatgen.mspx линк инфы по ДОСу

буду разбираться...

чё такое int21? int86 - прерывания
...
Рейтинг: 0 / 0
04.12.2005, 20:08
    #33416039
Гадёныш
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
Гадёнышне ну я конечно понимаю, но чё такое 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
...
Рейтинг: 0 / 0
04.12.2005, 22:29
    #33416096
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
Гадёныш , что бы это чудо не резервировало (char ff_rezerved[21]), это к длинным именам отношения не имеет. Во-первых, по стандарту длинные имена в VFat - до 255 символов, а во-вторых - части длинного имени действительно хранятся в VFat так, как я написал раньше - в виде "псеводфайлов", то есть записей в каталогах.
Это можно даже поисследовать - возьмите старенький Norton Disk Editor (запускать под DOS!) и посмотрите на VFat разделе длинные имена.
Статьи про FAT с тех самых "давних времен" еще можно найти в инете, можно начать со старого доброго citforum-а.

Int 21 - это функции DOS в виде программных прерываний, в том числе по обращению к внешним устройствам, Вам помогут функции чтения/записи секторов. Это еще умеет int13, но я думаю такой низкий уровень будет не нужен :-) В DOS есть и функция чтения каталога (int21 ax=0x4e), но не знаю, как она отнесется к длинным именам. Если удастся получить с ее помощью кусочки длинного имени - будет вообще легко тогда. Хотя маловероятно - на то она и DOS...
...
Рейтинг: 0 / 0
05.12.2005, 01:43
    #33416166
Гадёныш
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
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
}
}


воть чё я нашёл...
токо какое прерывание отвечает за фат? мож кто нает?

терь я знаю, что я ничего не знаю....
...
Рейтинг: 0 / 0
05.12.2005, 06:54
    #33416199
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
Подолью масла в огонь (обратите внимание, это NC - ДОСовский, выделенное имя - короткое, как и полагается, а внизу описание - длинное):
...
Рейтинг: 0 / 0
05.12.2005, 09:29
    #33416335
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имена файлов
вот-вот, имя файла-то он считывает. А насчет записи - это вряд ли?
Давно Norton не юзал, не помню уже :-)

автор
токо какое прерывание отвечает за фат? мож кто нает?

думаю, что никакое - надо юзать стандартные функции int21 ии int13
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Имена файлов / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]