Я пишу процедуру ввода-вывода с именем файла на ассемблере x86-16. Он берет восемь символов (мне не нужно поддерживать длинные имена файлов) с клавиатуры и печатает их в поле ввода текста на экране.
На данный момент я допускаю цифры, прописные / строчные буквы, подчеркивания и дефисы.
Я хотел бы разрешить все юридические символы, но я не могу найти официальный список запрещенных символов. Здравый смысл подсказывает мне, что косые черты незаконны, но если бы мне пришлось угадывать, я бы сказал, что символ «плюс» является законным. (редактировать: это не так!)
Я уже игнорирую символ точки, так как мой код автоматически обрабатывает добавление точки и расширения файла.
filenames
ms-dos
data-validation
Моя жизнь это ошибка.
источник
источник
+,;[]
, пробел иa-z
разрешены в Windows, но не в DOS. Проводник выдает мне ошибку: «Имя файла не может содержать ни одного из следующих символов,\ / : * ? " < > |
которые являются лишь подмножеством запрещенных символов в DOSОтветы:
Краткое резюме можно найти в Википедии :
https://en.wikipedia.org/wiki/8.3_filename#Directory_table
И вот что официально сказано в руководстве пользователя MS-DOS 6
Это из PC-DOS 7:
Руководство пользователя - ПК DOS 7
Файловая система FAT
Если вы также заинтересованы в MS-DOS 5.0, то вот она .
источник
CON
,PRN
,AUX
,NUL
,COM1
,COM2
,COM3
,COM4
,COM5
,COM6
,COM7
,COM8
,COM9
,LPT1
,LPT2
,LPT3
,LPT4
,LPT5
,LPT6
,LPT7
,LPT8
, иLPT9
также не допускается (см здесь )Строго говоря, разработчик приложений для MS / PC / DR-DOS должен запрашивать эту информацию у операционной системы. INT 0x21 с AX = 0x6505 возвращает указатель на так называемую
FCHAR
таблицу NLS для вашей страны и кодовой страницы. В этой таблице перечислены диапазон символов и дополнительный набор символов, которые заканчивают имена файлов.Теоретически это зависит от страны и кодовой страницы. Но тот факт, что он не был формально перенесен в API программы управления OS / 2, и тот факт, что FreeDOS имеет 1 таблицу на всех кодовых страницах и в разных странах, показывают, что она практически неизменна на практике.
дальнейшее чтение
источник
Я нашел это в руководстве для MS-DOS 3.3. Я работаю 6,22, но, вероятно, все еще применяется. Я был не прав насчет «+».
источник
Если вы просто хотите проверить имя файла, вы можете использовать его,
INT 21H/AH=60H (TRUENAME - CANONICALIZE FILENAME OR PATH)
убедившись, что переданное имя файла не имеет двоеточия или обратной косой черты (их можно рассматривать как буквы дисков и каталоги): функция берет предложенное имя файла и пытается канонизировать это путем ввода заглавных букв и проверки на недопустимые символы (также добавляются буква диска / имя сервера и путь.)В псевдокоде:
источник