J'écris une procédure d'E / S de nom de fichier dans le langage d'assemblage x86-16. Il prend huit caractères (je n'ai pas besoin de prendre en charge les noms de fichiers longs) du clavier et les imprime dans un champ de saisie de texte à l'écran.
Pour le moment, j'autorise les chiffres, les lettres majuscules / minuscules, les traits de soulignement et les tirets.
Je voudrais autoriser tous les symboles légaux, mais je ne trouve pas de liste officielle des personnages interdits. Le bon sens me dit que les barres obliques sont illégales, mais si je devais deviner, je dirais que le caractère plus est légal. (modifier: Ce n'est pas!)
J'ignore déjà le caractère de période, car mon code gère automatiquement l'ajout de la période et de l'extension de fichier.
la source
+,;[]
, l'espace eta-z
sont autorisés sous Windows mais pas sous DOS. L'Explorateur me donne l'erreur "Un nom de fichier ne peut contenir aucun des caractères suivants\ / : * ? " < > |
qui n'est qu'un sous-ensemble des caractères interdits dans DOSRéponses:
Un résumé concis peut être trouvé sur Wikipedia :
https://en.wikipedia.org/wiki/8.3_filename#Directory_table
Et voici ce que le guide de l'utilisateur de MS-DOS 6 a officiellement déclaré
Cela vient de PC-DOS 7:
Guide de l'utilisateur - PC DOS 7
Le système de fichiers FAT
Si vous êtes également intéressé par MS-DOS 5.0, le voici .
la source
CON
,PRN
,AUX
,NUL
,COM1
,COM2
,COM3
,COM4
,COM5
,COM6
,COM7
,COM8
,COM9
,LPT1
,LPT2
,LPT3
,LPT4
,LPT5
,LPT6
,LPT7
,LPT8
et neLPT9
sont pas autorisées (voir ici )À strictement parler, en tant que programmeur d'applications MS / PC / DR-DOS, vous êtes censé demander ces informations au système d'exploitation. INT 0x21 avec AX = 0x6505 renvoie un pointeur vers la
FCHAR
table dite NLS pour votre pays et votre page de codes. Ce tableau répertorie une plage de caractères et un autre ensemble de caractères qui terminent les noms de fichiers.En théorie, cela varie selon le pays et la page de codes. Mais le fait qu'il n'ait pas été officiellement transféré dans l'API du programme de contrôle OS / 2 et le fait que FreeDOS possède 1 table sur toutes les pages de codes et les pays montrent qu'il est largement invariant dans la pratique.
Lectures complémentaires
la source
J'ai trouvé cela dans un manuel pour MS-DOS 3.3. J'utilise 6.22, mais cela s'applique probablement toujours. J'avais tort que «+» soit autorisé.
la source
Si vous souhaitez simplement valider le nom de fichier, vous pouvez utiliser
INT 21H/AH=60H (TRUENAME - CANONICALIZE FILENAME OR PATH)
après vous être assuré que le nom de fichier passé n'a pas de deux-points ou de barre oblique inverse (ceux-ci peuvent être traités comme des lettres de lecteur et des répertoires): la fonction prend le nom de fichier proposé et tente de canoniser en mettant en majuscule les lettres et en vérifiant les caractères non valides (il ajoute également une lettre de lecteur / un nom de serveur et un chemin d'accès.)En pseudocode:
la source