Какие символы недопустимы для имени файла MS-DOS?

Я пишу процедуру ввода-вывода имени файла на языке ассемблера x86-16. Он занимает восемь символов (мне не нужно поддерживать длинные имена файлов) с клавиатуры и печатает их в поле ввода текста на экране.

на данный момент я разрешаю цифры, буквы верхнего/нижнего регистра, подчеркивания и дефисы.

Я хотел бы разрешить все легальные символы, но я не могу найти официальный список запрещенных символов. Здравый смысл говорит мне, что косые черты незаконны, но если бы мне пришлось догадаться, я сказал бы, что положительный характер является законным. (edit: это не так!)

Я уже игнорирую символ точки, так как мой код автоматически обрабатывает добавление точки и расширения файла.

1
задан phuclv
25.12.2022 10:34 Количество просмотров материала 3623
Распечатать страницу

4 ответа

краткое резюме можно найти Википедии:

допустимые символы для имен файлов DOS:

  • заглавные буквы A -Z
  • цифры 0 -9
  • пробел (хотя конечные пробелы в базовом имени или расширении считаются заполнением, а не частью имени файла, также имена файлов с пробелами в них должны быть заключены в кавычки, чтобы быть используется в командной строке DOS, и если команда DOS собрана программно, имя файла должно быть заключено в четырехкратные кавычки при просмотре как переменная в программе, строящей команду DOS.)
  • ! # $ % & ' ( ) - @ ^ _ ` { } ~
  • значения 128-255 (хотя если службы NLS активны в DOS, некоторые символы, интерпретируемые как строчные, недопустимы и недоступны)

это исключает следующие символы ASCII:

  • " * + , / : ; < = > ? \ [ ] | [9]
  • Windows / MS-DOS не имеет escape-символа оболочки
  • . (U+002E . полная остановка) в полях Имя и расширение, кроме in . и. . записи (см. ниже)
  • строчные буквы a -z (хранится как A–Z на FAT12/FAT16)
  • 0-31 управляющие символы
  • значение 127(DEL) [сомнительно – обсудить]

https://en.wikipedia.org/wiki/8.3_filename#Directory_table

и вот что MS-DOS 6 руководство пользователя официально сказал

имен файлов и каталогов

каждый файл и каталог, за исключением корневого каталога каждого диска должно быть имя. В следующем списке перечислены правила именования файлов и каталогов. Имена файлов и каталогов:

  • может быть до восемь символов. Кроме того, можно включить расширение длиной до трех символов.
  • регистр не учитывается. При вводе не имеет значения, используются ли буквы верхнего или нижнего регистра.
  • может содержать только буквы от A до Z, цифры от 0 до 9 и следующие специальные символы: символ подчеркивания (_), caret (^), знак доллара ($), tilde (~), восклицательный знак (!), знак номера (#), знак процента (%), амперсанд (&), дефис (-), скобки ({}), at sign (@), одинарные кавычки (`), Апостроф ('), а скобки (). Другие специальные символы не допускаются.
  • не может содержать пробелы, запятые, обратную косую черту или точки (кроме точки, отделяющей имя от расширения).
  • не может совпадать с именем другого файла или подкаталога в том же каталоге.

это из PC-DOS 7:

имя файла должно соответствовать следующим критериям:

  • он может содержать не более восьми символов.
  • оно может состоять из букв A до Z, цифры от 0 до 9 и следующие специальные символы:

    _ underscore            ^  caret
    $ dollar sign           ~  tilde
    ! exclamation point     #  number sign
    % percent sign          &  ampersand
    - hyphen                {} braces
    @ at sign               `  single quote
    ' apostrophe            () parentheses
    

Примечание: никакие другие специальные символы не допустимы.

  • имя не может содержать пробелы, запятые, обратную косую черту или точки (кроме точки, отделяющей имя от расширения).
  • имя не может быть одним из следующих зарезервированных имен файлов: CLOCK$, CON, AUX, COM1, COM2, COM3, COM4, LPT1, LPT2, LPT3, LPT4, NUL и PRN.
  • имя не может совпадать с именем другого файла в каталоге.

руководство пользователя-PC DOS 7

первый байт имени не должен быть 0x20 (пробел). Короткие имена или расширения дополняются пробелами. Специальные символы ASCII 0x22 ("), 0x2a (*), 0x2b (+), 0x2c (,), 0x2e (.), 0x2f (/), 0x3a (:), 0x3b (;), 0x3c (<), 0x3d (=), 0x3e (>), 0x3f (?), 0x5b ([), 0x5c (\), 0x5d (]), 0x7c (|) не допускается.

файловая система FAT

если вы также заинтересованы в MS-DOS 5.0, то здесь.

29
отвечен phuclv 2022-12-26 18:22

строго говоря, как программист приложений MS/PC/DR-DOS вы должны запросить эту информацию у операционной системы. INT 0x21 с AX=0x6505 возвращает указатель на так называемый FCHAR таблица NLS для вашей страны и кодовой страницы. В этой таблице перечислены различные символы и знаки, которые заканчиваются имена.

теоретически зависит от страны и кодовой страницы. Но дело в том, что формально он не был перенесен в API управляющей программы OS/2 а то, что FreeDOS имеет 1 таблицу по всем кодовым страницам и странам показать, что он в значительной степени инвариантен на практике.

более дальнеишее чтение

12
отвечен JdeBP 2022-12-26 20:39

Я нашел это в руководстве для MS-DOS 3.3. Я запускаю 6.22, но это, вероятно, все еще применимо. Я ошибался, что " + " разрешено.

Enter image description here

10
отвечен My life is a bug. 2022-12-26 22:56

Если вы просто хотите проверить имя файла, вы можете использовать INT 21H/AH=60H (TRUENAME - CANONICALIZE FILENAME OR PATH) после проверки того, что переданное имя файла не имеет двоеточия или обратной косой черты (те, которые могут рассматриваться как буквы дисков и каталогов): функция принимает предложенное имя файла и пытается канонизировать его, прописными буквами и проверки на наличие недопустимых символов (он также добавляет букву диска/имя сервера и путь.)

в псевдокоде:

If !(filename contains {"/", "\", ".", ":"})
    Canonicalize filename (INT 21H/AH=60H)
    If !(CF is set) filename is valid
Filename is not valid
3
отвечен ErikF 2022-12-27 01:13

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх