Piszę procedurę we / wy nazwy pliku w języku asemblera x86-16. Pobiera osiem znaków (nie muszę obsługiwać długich nazw plików) z klawiatury i drukuje je w polu wprowadzania tekstu na ekranie.
W tej chwili zezwalam na cyfry, wielkie / małe litery, podkreślenia i łączniki.
Chciałbym dopuścić wszystkie legalne symbole, ale nie mogę znaleźć oficjalnej listy zbanowanych postaci. Zdrowy rozsądek mówi mi, że cięcia są nielegalne, ale gdybym musiał zgadywać, powiedziałbym, że znak plus jest legalny. (edytuj: To nie jest!)
Już ignoruję znak kropki, ponieważ mój kod automatycznie obsługuje dodawanie kropki i rozszerzenia pliku.
filenames
ms-dos
data-validation
Moje życie jest błędem.
źródło
źródło
+,;[]
, spacja ia-z
są dozwolone w Windows, ale nie DOS. Eksplorator wyświetla błąd „Nazwa pliku nie może zawierać żadnego z następujących znaków,\ / : * ? " < > |
który jest tylko podzbiorem zabronionych znaków w systemie DOSOdpowiedzi:
Zwięzłe streszczenie można znaleźć na Wikipedii :
https://en.wikipedia.org/wiki/8.3_filename#Directory_table
Oto, co oficjalnie powiedział przewodnik użytkownika MS-DOS 6
Pochodzi z PC-DOS 7:
Podręcznik użytkownika - PC DOS 7
System plików FAT
Jeśli interesuje Cię także MS-DOS 5.0, oto on .
źródło
CON
,PRN
,AUX
,NUL
,COM1
,COM2
,COM3
,COM4
,COM5
,COM6
,COM7
,COM8
,COM9
,LPT1
,LPT2
,LPT3
,LPT4
,LPT5
,LPT6
,LPT7
,LPT8
, aLPT9
także nie są dozwolone (patrz tutaj )Ściśle mówiąc, jako programista aplikacji MS / PC / DR-DOS powinieneś zapytać system operacyjny o te informacje. INT 0x21 z AX = 0x6505 zwraca wskaźnik do tak zwanej
FCHAR
tabeli NLS dla twojego kraju i strony kodowej. W tej tabeli wymieniono zakres znaków i kolejny zestaw znaków kończących nazwy plików.Teoretycznie różni się w zależności od kraju i strony kodowej. Ale fakt, że nie został formalnie przeniesiony do interfejsu API programu sterującego OS / 2 oraz fakt, że FreeDOS ma 1 tabelę na wszystkich stronach kodowych i krajach, pokazuje, że jest w dużej mierze niezmienna w praktyce.
Dalsza lektura
źródło
Znalazłem to w instrukcji dla MS-DOS 3.3. Korzystam z wersji 6.22, ale prawdopodobnie nadal obowiązuje. Myliłem się, że „+” jest dozwolone.
źródło
Jeśli chcesz tylko sprawdzić poprawność nazwy pliku, możesz użyć tego
INT 21H/AH=60H (TRUENAME - CANONICALIZE FILENAME OR PATH)
po upewnieniu się, że przekazana nazwa pliku nie ma dwukropka ani ukośnika odwrotnego (mogą być traktowane jako litery dysku i katalogi): funkcja przyjmuje proponowaną nazwę pliku i próbuje kanonalizować zaznaczając litery i sprawdzając, czy są nieprawidłowe znaki (dodaje także literę dysku / nazwę serwera i ścieżkę).W pseudokodzie:
źródło