Neden dosya adında “?” Gibi özel karakterler kullanamıyorsunuz? veya “;”?


17

Bir dosyayı kaydetmeye çalıştığımda, Windows'ta adda özel karakterler (iki nokta üst üste, soru işareti veya ünlem işareti gibi) kullanırsam, dosya adının geçersiz olduğunu belirten bir ileti alıyorum.

Neden?



Hangi programda bir dosyayı kaydetmeye çalışıyorsunuz ve dosyadaki rahatsız edici karakter mi yoksa dosya adında (göründüğü gibi) mi?
Jukka K. Korpela


Yanıtlar:


22

Windows için (ve karakterlerin çoğunun orijinal olarak geldiği DOS) özel bir anlamı olan birkaç karakter vardır.

dan MSDN :

Dosya adı şu karakterlerden hiçbirini içeremez:
\ /: *? "<> |

/bir anahtardır (ve ayrıca bir dizin ayırıcıdır).
\bir dizin ayırıcıdır.
:bir sürücü belirleyicisidir.
*ve ?aramada kullanılan joker karakterlerdir.
"parametrelerdeki boşluklara izin vermenin bir yoludur.
<ve >bir programın giriş ve çıkışının ekran / klavye dışında bir şeyden gelmesine ve gitmesine izin veren yeniden yönlendirmelerdir.
|bir programdan çıktının diğerine giriş olarak kullanılmasına izin veren bir borudır.


1
Bu cevabı açıklığa kavuşturmak için, bu özel karakterler bir dosya adındaysa bir komut satırını (veya yolu) ayrıştırmayı engelleyebilir. Dosya adını herhangi bir şekilde sınırlandırmaya gerek yoktur (örn. Tırnak işaretleri veya boşluklarla çevreleyin), bu nedenle böyle özel bir karakterle karşılaşmak yanlış ayrıştırmaya neden olur (yani dosya adının veya karakterin özel karakter kısmı mı?).
talaş

1
Bununla birlikte, uzun dosya adlarının ve alıntı işaretlerinin işlenmesi nedeniyle bu kısıtlamaların bazılarının artık gerekli olmadığı tartışmalıdır. \ ? *ve "mevcut sözdiziminde gerçekten gerekli olan tek karakterdir, çünkü diğer karakterler sadece tırnak işaretleri dışında yararlıdır. İstisna şudur: başka bir yerde izin verirken yasadışı çıkarılabilen sadece ikinci karakter olarak yararlıdır. Başka bir deyişle, adında dosya yok A:A letter's story.txt, ancak adında bir dosya ile sorun yokSarah: My favorite cat.txt
trlkly

<>"ayrılmış joker karakterlerdir. Windows bunları *?.basit semantiğe sahip yerel NT'ye çevirirken DOS için karmaşık semantiği uygulamak için kullanır *?.. Altı joker karakter ayrılmıştır, çünkü Windows dosya sistemi içinde joker karakter eşleşmesi uygular, yani doğrudan NtQueryDirectoryFilesistem çağrısında kaçış mekanizması yoktur. Unix'te, joker karakterler genellikle onlardan kaçmayı destekleyen bir kabuk tarafından uygulama düzeyinde uygulanır.
Eryk Sun

Bunun :genellikle dosya adlarında saklandığını, ancak dosya yollarında saklanmadığını unutmayın . Aygıt adları için ve dosya akışları için sınırlayıcı olarak kullanılır (örn. "Dosyaadı: akış adı: akış türü"). Ayrıca, bu tür VirtualBox gibi bazı dosya sistemleri paylaşılan klasör dosya sistemi izin :, |ve dosya adları ASCII kontrol karakterleri (1-31), ancak bunlar adlandırılmış yöneltme dosya sistemi hariç Microsoft'un dosya sistemlerinin tümünde ayrılmışlardır.
Eryk Sun
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.