Saya sedang menulis nama file I / O prosedur dalam bahasa assembly x86-16. Dibutuhkan delapan karakter (saya tidak perlu mendukung nama file panjang) dari keyboard dan mencetaknya ke bidang input teks di layar.
Saat ini saya sedang mengizinkan angka, huruf besar / kecil, garis bawah, dan tanda hubung.
Saya ingin mengizinkan semua simbol hukum, tetapi saya tidak dapat menemukan daftar resmi karakter yang dilarang. Akal sehat mengatakan kepada saya bahwa tebasan adalah ilegal, tetapi jika saya harus menebak, saya akan mengatakan bahwa karakter plus itu legal. (sunting: Bukan!)
Saya sudah mengabaikan karakter periode karena kode saya secara otomatis menangani penambahan periode dan ekstensi file.
filenames
ms-dos
data-validation
Hidup saya adalah bug.
sumber
sumber
+,;[]
, ruang dana-z
diizinkan di Windows tetapi tidak DOS. Explorer memberi saya kesalahan "Nama file tidak boleh mengandung karakter berikut\ / : * ? " < > |
yang hanya merupakan bagian dari karakter yang dilarang di DOSJawaban:
Ringkasan singkat dapat ditemukan di Wikipedia :
https://en.wikipedia.org/wiki/8.3_filename#Directory_table
Dan inilah yang dikatakan panduan pengguna MS-DOS 6 secara resmi
Ini dari PC-DOS 7:
Panduan Pengguna - PC DOS 7
Sistem file FAT
Jika Anda juga tertarik dengan MS-DOS 5.0 maka ini dia .
sumber
CON
,PRN
,AUX
,NUL
,COM1
,COM2
,COM3
,COM4
,COM5
,COM6
,COM7
,COM8
,COM9
,LPT1
,LPT2
,LPT3
,LPT4
,LPT5
,LPT6
,LPT7
,LPT8
, danLPT9
juga tidak diizinkan (lihat di sini )Sebenarnya, sebagai pemrogram aplikasi MS / PC / DR-DOS, Anda seharusnya menanyakan sistem operasi untuk informasi ini. INT 0x21 dengan AX = 0x6505 mengembalikan pointer ke apa yang disebut
FCHAR
tabel NLS untuk negara dan halaman kode Anda. Tabel ini mencantumkan serangkaian karakter dan serangkaian karakter lebih lanjut yang mengakhiri nama file.Secara teori bervariasi menurut negara dan halaman kode. Tetapi fakta bahwa itu tidak secara resmi dibawa ke dalam OS / 2 Control Program API dan fakta bahwa FreeDOS memiliki 1 tabel di semua codepages dan negara-negara menunjukkan bahwa sebagian besar invarian dalam praktiknya.
Bacaan lebih lanjut
sumber
Saya menemukan ini dalam manual untuk MS-DOS 3.3. Saya menjalankan 6.22, tetapi mungkin masih berlaku. Saya salah tentang '+' diizinkan.
sumber
Jika Anda hanya ingin memvalidasi nama file, Anda mungkin ingin menggunakan
INT 21H/AH=60H (TRUENAME - CANONICALIZE FILENAME OR PATH)
setelah memastikan bahwa nama file yang disahkan tidak memiliki titik dua atau backslash (yang dapat diperlakukan sebagai huruf drive dan direktori): fungsi tersebut mengambil nama file yang Anda usulkan dan mencoba mengkanonikkan itu dengan huruf besar huruf dan memeriksa untuk karakter yang tidak valid (itu juga menambahkan huruf drive / nama server dan path.)Dalam pseudocode:
sumber