MS-DOS dosya adı için hangi karakterler geçersiz?


16

X86-16 derleme dilinde bir dosya adı G / Ç yordamı yazıyorum. Klavyeden sekiz karakter (uzun dosya adlarını desteklememe gerek yok) alır ve bunları ekran üzerindeki metin giriş alanına yazdırır.

Şu anda rakamlara, büyük / küçük harflere, alt çizgilere ve kısa çizgilere izin veriyorum.

Tüm yasal simgelere izin vermek istiyorum, ancak yasaklanmış karakterlerin resmi bir listesini bulamıyorum. Sağduyu bana eğik çizgilerin yasadışı olduğunu söylüyor, ama tahmin etmeliysem artı karakterin yasal olduğunu söyleyebilirim. (değiştir: Değil!)

Kodum nokta ve dosya uzantısını otomatik olarak işlediğinden, dönem karakterini zaten görmezden geliyorum.


17
Retrocomputing'i de faydalı bulabilirsiniz .
Bob

Windows'ta bir klasör oluşturmaya çalışın ve '?' adında. Bir araç ipucu size hangi karakterlerin yasak olduğunu söyler. Bu size bir başlangıç ​​sağlar
:)

@Mixxiphoid, Windows'ta izin verilen karakter kümesi çok daha büyük olduğu için çalışmaz. Örneğin +,;[], boşluk ve a-zWindows'da izin verilir, ancak DOS'da izin verilmez. Explorer bana "Dosya adı \ / : * ? " < > |DOS'ta yasaklanmış karakterlerin sadece bir alt kümesi olan aşağıdaki karakterlerden hiçbirini içeremez
phuclv

1
@phuclv bu yüzden 'Bu size bir başlangıç ​​verir' dedim ve bunun neden bir cevap değil de bir yorum olduğunu söyledim.
28x18

Neden tüm MS-DOS sembolleri? Neden diğer eski işletim sistemi kurallarını da dikkate almıyorsunuz?
jpmc26

Yanıtlar:


30

Vikipedi'de kısa bir özet bulabilirsiniz :

DOS dosya adları için yasal karakterler aşağıdakileri içerir:

  • Büyük harfler A-Z
  • Sayılar 0-9
  • Boşluk (taban adındaki veya uzantıdaki sondaki boşluklar dosya adının bir parçası değil, dolgu olarak kabul edilirse de, DOS komut satırında kullanılmak üzere tırnak işaretleri içine alınmalı ve DOS komutu programlı olarak oluşturulur, DOS komutunu oluşturan programda değişken olarak görüntülendiğinde dosya adı dörtlü tırnak içine alınmalıdır.)
  • ! # $ % & ' ( ) - @ ^ _ ` { } ~
  • 128-255 arasındaki değerler (DOS'ta NLS hizmetleri etkinse, küçük harf olarak yorumlanan bazı karakterler geçersiz ve kullanılamaz)

Aşağıdaki ASCII karakterleri hariçtir:

  • " * + , / : ; < = > ? \ [ ] | [9]
  • Windows / MS-DOS'ta kabuk kaçış karakteri yok
  • .(U + 002E. Tam durak) içinde ad ve uzantı alanları hariç. ve .. girişleri (aşağıya bakınız)
  • Küçük harfler a- z(FAT12 / FAT16'da A – Z olarak saklanır)
  • Kontrol karakterleri 0-31
  • Değer 127 (DEL) [şüpheli - tartış]

https://en.wikipedia.org/wiki/8.3_filename#Directory_table

Ve burada MS-DOS 6 kullanım kılavuzu resmi olarak söyledi

Dosya ve Dizinleri Adlandırma

Her sürücüdeki kök dizin hariç her dosya ve dizinin bir adı olmalıdır. Aşağıdaki listede dosya ve dizin adlandırma kuralları özetlenmektedir. Dosya ve dizin adları:

  • Sekiz karakter uzunluğunda olabilir. Ayrıca, üç karakter uzunluğunda bir uzantı ekleyebilirsiniz.
  • Büyük / küçük harfe duyarlı değildir. Yazarken büyük veya küçük harf kullanmanız önemli değildir.
  • Yalnızca A'dan Z'ye kadar olan harfleri, 0'dan 9'a kadar olan sayıları ve aşağıdaki özel karakterleri içerebilir: alt çizgi ( _), şapka ( ^), dolar işareti ( $), tilde ( ~), ünlem işareti ( !), sayı işareti ( #), yüzde işareti ( %), ve işareti ( &), tire işareti ( -), parantez ( {}), işaret ( @), tek tırnak işareti ( `), kesme işareti ( ') ve parantez (). Başka hiçbir özel karakter kabul edilemez.
  • Boşluk, virgül, ters eğik çizgi veya nokta içeremez (adı uzantıdan ayıran süre hariç).
  • Aynı dizindeki başka bir dosyanın veya alt dizinin adıyla aynı olamaz.

Bu PC-DOS 7'den:

Bir dosyaya atadığınız ad aşağıdaki ölçütleri karşılamalıdır:

  • Sekizden fazla karakter içerebilir.
  • A'dan Z'ye kadar olan harfler, 0'dan 9'a kadar olan rakamlar ve aşağıdaki özel karakterlerden oluşabilir:

    _ underscore            ^  caret
    $ dollar sign           ~  tilde
    ! exclamation point     #  number sign
    % percent sign          &  ampersand
    - hyphen                {} braces
    @ at sign               `  single quote
    ' apostrophe            () parentheses
    

Not: Başka hiçbir özel karakter kabul edilemez.

  • Ad, boşluk, virgül, ters eğik çizgi veya nokta içeremez (adı uzantıdan ayıran süre hariç).
  • Ad, şu ayrılmış dosya adlarından biri olamaz: CLOCK $, CON, AUX, COM1, COM2, COM3, COM4, ​​LPT1, LPT2, LPT3, LPT4, NUL ve PRN.
  • Dizin içindeki başka bir dosya ile aynı ad olamaz.

Kullanım Kılavuzu - PC DOS 7

Bir adın ilk baytı 0x20 (boşluk) olmamalıdır. Kısa adlar veya uzantılar boşluklarla doldurulur. Özel ASCII karakterleri 0x22 ( "), 0x2a ( *), 0x2b ( +), 0x2c (, 0x2e ( .), 0x2f ( /), 0x3a ( :), 0x3b ( ;), 0x3c ( <), 0x3d ( =), 0x3e ( >), 0x3f ( ?) , 0x5b ( [), 0x5c ( \), 0x5d ( ]), 0x7c ( |) kullanılamaz.

FAT dosya sistemi

Ayrıca MS-DOS 5.0 ile ilgileniyorsanız o zaman işte burada .


11
Bu değer sadece geçerli karakterler içeren olsa bile özel dosya adları belirterek olabilir CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, ve LPT9(bkz de izin verilmez burada )
Bill Tür

3
@ThomasSchremser "Kullanmayın", "Kaçının" ve "Önerilmez", "izin verilmez" ile aynı değildir.
RobIII

1
@RobIII Evet, ancak "MS-DOS" belgelerine değil, "Windows> Masaüstü" belgelerine bağlandılar. DOS için wiki "Onlar yerleşik karakter cihazları tarafından işgal edilmiştir olarak bakılmaksızın uzantısı dosya adları olarak kullanılamaz DOS ayrılmış cihaz isimler var" diyor. Başka bir deyişle, DOS ve Windows'un bazı sürümlerinde izin verilmez ve diğer Windows sürümlerinde önerilmez.
Quantic

İlginç olan `` tek bir alıntı olarak adlandırılır. Ben her zaman bir backtick denilen duydum ve tek bir alıntı olarak '(yanlış (kesme işareti değil) kesme işareti).
ale10ander

2
@ ale10ander evet bu beni şaşırttı. Her zaman birçok insanın kesme işareti (benim gibi) veya teklifin başlangıcı için kullanmasından nefret ettim. Örneğin GNU belgeleri her zaman benim için çok çirkin ve daha az okunabilir olan `` böyle '' yazar
phuclv

12

Kesin olarak, bir MS / PC / DR-DOS uygulama programcısı olarak işletim sisteminden bu bilgileri istemeniz gerekir. INT 0x21 ve AX = 0x6505 FCHAR, ülkeniz ve kod sayfanız için NLS tablosuna bir işaretçi döndürür . Bu tablo, bir dizi karakteri ve dosya adlarını sonlandıran başka bir karakter kümesini listeler.

Teoride ülkeye ve kod sayfasına göre değişir. Ancak resmi olarak OS / 2 Kontrol Programı API'sına taşınmamış olması ve FreeDOS'un tüm kod sayfalarında ve ülkelerde 1 tabloya sahip olması, uygulamada büyük ölçüde değişmez olduğunu göstermektedir.

daha fazla okuma


10

Bu MS-DOS 3.3 için bir kılavuzda buldum. 6.22 kullanıyorum ama muhtemelen hala geçerli. İzin verilen '+' konusunda yanılmışım.

Resim açıklamasını buraya girin


2
Günün arkasından gelen bir kullanım kılavuzu Wikipedia'dan daha güvenilirdir
Stewart

@ Önemli olan Vikipedi'nin değil, Wikipedia'daki alıntılardır. Şüphe duyuyorsanız sadece \ @Mylifeisabug makalesindeki dipnotları ve referansları kontrol edin MS-DOS 6 kılavuzunu az önce ekledim
phuclv

3

Sadece dosya adını doğrulamak istiyorsanız, INT 21H/AH=60H (TRUENAME - CANONICALIZE FILENAME OR PATH) adını , iletilen dosya adının iki nokta üst üste veya ters eğik çizgi içermediğinden emin olduktan sonra (bunlar sürücü harfleri ve dizinler olarak değerlendirilebilir): işlev önerilen dosya adınızı alır ve standartlaştırmaya çalışır harfleri büyük harflerle yazarak ve geçersiz karakterleri kontrol ederek (ayrıca bir sürücü harfi / sunucu adı ve yolu ekler.)

Sahte kodda:

If !(filename contains {"/", "\", ".", ":"})
    Canonicalize filename (INT 21H/AH=60H)
    If !(CF is set) filename is valid
Filename is not valid
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.