Estoy escribiendo un procedimiento de E / S de nombre de archivo en lenguaje ensamblador x86-16. Toma ocho caracteres (no necesito admitir nombres de archivo largos) del teclado y los imprime en un campo de entrada de texto en pantalla.
Por el momento, estoy permitiendo números, letras mayúsculas / minúsculas, guiones bajos y guiones.
Me gustaría permitir todos los símbolos legales, pero no puedo encontrar una lista oficial de caracteres prohibidos. El sentido común me dice que las barras son ilegales, pero si tuviera que adivinar, diría que el carácter positivo es legal. (editar: ¡no lo es!)
Ya estoy ignorando el carácter del punto ya que mi código maneja automáticamente la adición del período y la extensión del archivo.
filenames
ms-dos
data-validation
Mi vida es un error.
fuente
fuente
+,;[]
, espacio ya-z
están permitidos en Windows pero no en DOS. Explorer me da el error "Un nombre de archivo no puede contener ninguno de los siguientes caracteres,\ / : * ? " < > |
que es solo un subconjunto de los caracteres prohibidos en DOSRespuestas:
Un resumen conciso se puede encontrar en Wikipedia :
https://en.wikipedia.org/wiki/8.3_filename#Directory_table
Y esto es lo que dijo oficialmente la guía del usuario de MS-DOS 6
Esto es de PC-DOS 7:
Guía del usuario - PC DOS 7
El sistema de archivos FAT
Si también está interesado en MS-DOS 5.0, aquí está .
fuente
CON
,PRN
,AUX
,NUL
,COM1
,COM2
,COM3
,COM4
,COM5
,COM6
,COM7
,COM8
,COM9
,LPT1
,LPT2
,LPT3
,LPT4
,LPT5
,LPT6
,LPT7
,LPT8
, yLPT9
tampoco están permitidos (ver aquí )Hablando estrictamente, como programador de aplicaciones MS / PC / DR-DOS se supone que debe solicitar esta información al sistema operativo. INT 0x21 con AX = 0x6505 devuelve un puntero a la llamada
FCHAR
tabla NLS para su país y página de códigos. Esta tabla enumera un rango de caracteres y un conjunto adicional de caracteres que terminan los nombres de archivo.En teoría, varía según el país y la página de códigos. Pero el hecho de que no se transfirió formalmente a la API del programa de control de OS / 2 y el hecho de que FreeDOS tiene 1 tabla en todas las páginas de códigos y países muestran que en gran medida es invariable en la práctica.
Otras lecturas
fuente
Encontré esto en un manual para MS-DOS 3.3. Estoy ejecutando 6.22, pero probablemente todavía se aplica. Me equivoqué acerca de que se permitiera '+'.
fuente
Si solo desea validar el nombre del archivo, puede usarlo
INT 21H/AH=60H (TRUENAME - CANONICALIZE FILENAME OR PATH)
después de asegurarse de que el nombre del archivo pasado no tenga dos puntos o barra invertida (pueden tratarse como letras de unidad y directorios): la función toma su nombre de archivo propuesto e intenta canonicalizar en mayúsculas y buscando caracteres no válidos (también agrega una letra de unidad / nombre de servidor y ruta).En pseudocódigo:
fuente