Ben arasındaki fark hakkında merak \
ve /
dosya yollarındaki. Bazen bir yolun, /
bazen de onunla birlikte olduğunu fark ettim \
.
Herkes ne zaman kullanılacağını açıklayabilirse harika olur \
ve /
.
Ben arasındaki fark hakkında merak \
ve /
dosya yollarındaki. Bazen bir yolun, /
bazen de onunla birlikte olduğunu fark ettim \
.
Herkes ne zaman kullanılacağını açıklayabilirse harika olur \
ve /
.
Yanıtlar:
/
Unix ve Unix benzeri sistemlerde yol ayırıcıdır. Modern Windows dosya yollarında genellikle her ikisini de \
ve /
birbirinin yerine kullanabilir , ancak Microsoft \
onlarca yıldır yol ayırıcı olarak kullanılmasını savunmuştur .
Bu, 1970'lere kadar uzanan tarihsel nedenlerden ötürü, Windows'un on yıldan fazla bir süre öncesine dayanmasıyla yapılır. Başlangıçta, MS-DOS (erken Windows için temel) dizinleri desteklemiyordu. Unix, /
en başından beri karakteri kullanarak dizin desteğine sahipti . Ancak, MS-DOS 2.0 dizinleri eklendiğinde, Microsoft ve IBM zaten komut anahtarları için /
karakterini kullanıyordu ve DOS'un hafif ayrıştırıcısı ( alt uç donanımda çalışmak üzere tasarlanmış QDOS'dan alınıyor ) nedeniyle, bir karakteri mevcut uygulamalarıyla uyumluluğu bozmadan kullanmanın uygun bir yolu ./
Bu nedenle, dosya yollarını aşağıdaki gibi komutlara argüman olarak iletirken "bir anahtarı kaçırmak" veya "geçersiz anahtarı" ile ilgili hataları önlemek için:
cd/ <---- no switch specified
dir folder1/folder2 <---- /folder2 is not a switch for dir
\
karakterin kullanılmasına karar verildi , böylece bu komutları şöyle yazabilirsiniz
cd\
dir folder1\folder2
hatasız.
Daha sonra Microsoft ve IBM, DOS ile ilgisi olmayan OS / 2 adlı bir işletim sisteminde işbirliği yaptı . OS / 2, muhtemelen daha fazla Unix geliştiricisini çekmek için her iki ayırıcıyı da kullanma yeteneğine sahipti. Ne zaman , Microsoft ve IBM 1990 yılında yollarını ayırdı Microsoft ne vardı kod aldı ve oluşturulan Windows NT Windows'un tüm modern versiyonları onunla bu ayırıcı bilinemezciliği taşıyan dayandırıldığı.
Geriye dönük uyumluluk, üstlendikleri tüm büyük işletim sistemi geçişlerinden (DOS'tan Win16 / DOS'a, Win16 / Win32'ye, Win32 / WinNT'ye) Microsoft için oyunun adı olduğundan, bu özellik sıkışmış ve muhtemelen bir süredir var.
Bu nedenle bu tutarsızlık var. Yaptığınız şey üzerinde gerçekten bir etkisi olmamalı, çünkü dediğim gibi WinAPI bunları genellikle birbirinin yerine kullanabilir. Ancak, dizin adları arasında /
bir süre beklediklerinde bir iletiyi geçerseniz, üçüncü taraf uygulamaları muhtemelen bozulur \
. Windows kullanıyorsanız, ile devam edin \
. Unix veya URI'ler (temelleri Unix yollarında olan, ancak bu tamamen başka bir hikaye) kullanıyorsanız,/
.
C # bağlamında: Bu, çünkü unutulmamalıdır olduğunu , teknik olarak bir C # soru olduğunu daha "taşınabilir" C # kodu yazmak isterseniz o Unix ve Windows (C # bir Windows dil ağırlıklı olsa bile) hem eserler sizi kullanmak isteyebilirsiniz Path.DirectorySeparatorChar
kodunuzu tercih o sistem üzerinde ayırıcı ve kullanımını kullanır böylece alanını Path.Combine()
düzgün ekleme yollara.
Path.Combine
.
foo.exe /bar
komut satırı anahtarı foo.exe \bar
olarak yorumlanırken , örneğin geçerli "sürücünün" bar
kök dizininde bulunan adlı bir dosyaya / klasöre atıfta bulunularak yorumlanabilir . \
C:\
/
için \
bunu atlatmak bile, bir fark olacaktır, yani katmanda compat Win32 yapılır. Bunun en iyi bilinen örneği genişletilmiş uzunluk yollarıdır: \\?\C:\
NTFS'de beklendiği gibi çalışır ancak \\?\C:/
çalışmaz.
/
ve ` is not entirely true. For network path you have to use
`(örn \\ <servername> bot değil // <servername>.)
MS-DOS 1.0 '/' komut satırı seçeneği (veya anahtar) karakter kuralını CP / M korudu. O zaman dosya sisteminde dizin yapısı ve çakışma yoktu.
Microsoft, MS-DOS (ve PC-DOS) 2.0 ile daha Unix benzeri bir ortam geliştirdiğinde, varolan komut satırı seçenekleriyle çakışmayan bir şey kullanarak yol ayırıcıyı temsil etmeleri gerekiyordu. Dahili olarak, sistem '/' veya '\' ile eşit derecede iyi çalışır. Komut işlemcisi (ve birçok uygulama) anahtar karakteri olarak '/' karakterini kullanmaya devam etti.
Unix uyumluluğunu iyileştirmek için varsayılanı geçersiz kılmak için bir CONFIG.SYS
girdi SWITCHAR=-
kullanılabilir /
. Bu, yerleşik komutların ve standart yardımcı programların alternatif karakteri kullanmasını sağlar. Unix yol ayırıcı, dosya ve dizin adları için açık bir şekilde kullanılabilir. Bu girdi sonraki sürümlerde kaldırıldı, ancak önyüklemeden sonra değeri ayarlamak için bir DOS çağrısı belgelendi.
Bu çok az kullanıldı ve üçüncü taraf araçların çoğu değişmedi. Karışıklık devam ediyor. Unix araçlarının çoğu bağlantı noktası '-' anahtar karakterini korurken, bazıları her iki kuralı da destekler.
Takip eden PowerShell komut işlemcisi, zorlu kaçış ve anahtar parametrelerini uygular ve eski araçların kullanıldığı yerler hariç karışıklığı büyük ölçüde önler.
Ne soru ne de cevap C # ile ilgilidir.
/
RSTS (1970) ve RSX (1972) gibi çeşitli PDP-11 işletim sistemlerinde seçenek tanıtıcı olarak kullanılması CP / M (1973) 'den önce gelir.
Unix tabanlı sistemlerde \
bir kaçış karakteri, yani \
ayrıştırıcıya bunun ifadenin sonu değil bir boşluk olduğunu söyler. Unix sistemlerinde /
dizin ayırıcıdır.
Windows'ta \
dizin ayırıcıdır, ancak /
dosya veya dizin adlarında kullanılamaz.
\
ve /
( ve diğer birkaç sembol) dosya adlarında kullanılamaz çünkü DOS, Unix kullanıcılarının alışkın olduğu karmaşık ayrıştırıcıya sahip değildi. İyi bir ayrıştırıcı olmaması, MS-DOS'un QDOS'dan ("Hızlı ve Kirli İşletim Sistemi") alçalmasının sonucudur. İşlerin hızlı ve sınırlı bir donanımda çalışmasını sağlamaktı. Bütün bunlar elbette geriye dönük uyumluluk için günümüzde hala mevcuttur.
/
bir "Alternate_Directory_Separator" olarak eklendiğini belirtmek gerekir
\
bir Windows dosya yolunda ve /
bir URI'de doğrudur.Bu ilgili bir kaynak olabilir.
\
için /
otomatik. Kitabımda buna "sorunsuz çalışıyor" deniyor.
Verilen cevapların yanı sıra, programlama dillerinde, metin editörlerinde ve sözcüksel analiz uygulayan genel sistemlerde \
(örneğin \n
\t
) özel karakterler için yaygın olarak kullanılanlardan bahsetmeye değer .
Örneğin, programlıyorsanız, ters eğik çizgiden başka biriyle kaçmak zorunda kalmanız bazen zor olabilir (\\
düzgün bir şekilde kullanmak için ) C # gibi kaçan dizeleri kullanmanız gerekebilir.@"\test"
.
Elbette, daha önce de belirtildiği gibi, web URI'leri standart olarak eğik çizgi kullanır ancak her iki eğik çizgi de en son ve en yaygın komut satırı araçlarında çalışır.
GÜNCELLEME: Biraz arama yaptıktan sonra, o zamanlar DOS ve Unix tabanlı sistemler çağında, "bilgisayar geçmişi" arasındaki hikayenin tamamı görünüyor /
ve \
geri dönüyor. HowToGeek'in bu hikaye hakkında ilginç bir makalesi var.
Kısaca, DOS 1.0 başlangıçta IBM tarafından dizin desteği olmadan yayımlandı ve /
başka ("anahtarlama") komut işlevleri için kullanıldı. Dizinler 2.0 sürümünde tanıtıldığında /
, zaten kullanımdaydı, bu yüzden IBM görsel olarak en yakın sembolü seçti \
. Öte yandan, Unix standart /
olarak dizinler için kullanılır .
Kullanıcılar birçok farklı sistemi kullanmaya başladığında, sistem geliştiricilerinin sistemleri her iki durumda da çalıştırmayı denemelerini sağlayarak karışık hale gelmeye başladılar - bazı tarayıcılar http: \\ www.test'i desteklediğinden, bu URL'ler için bile geçerlidir . com \ go biçiminde. Bu genel olarak dezavantajlara sahipti, ancak bugün her şey, artık DOS'a dayanmasalar bile, Windows'ta her iki eğik çizgiyi destekleme girişimi ile hala geriye doğru bölünebilirlik nedenleri için duruyor.
` as well as many
makeix kabuklarını kullandığınızda Unix oldukça öfkeli ... son Windows Windows'un varsayılan olarak /
her ikisini de kabul edebileceği ALTERNATE_PATH_SEPARATOR ortam değişkenini tanımladığı konusunda haklısınız .
/
, sistemin her yerinde destek yollarını içeriyordu - elbette, uygulamalar boş zamanlarında bu yolları yanlış anlayabilir, bu yüzden çok fazla kullanılmadı. Kendi yollarını (kırık) doğrulamasını yapmaya çalışmayan CLI dışı uygulamalar, başlangıçtan itibaren iyi çalıştı.
Her ikisini de C # ile kullanmamalısınız. Her zaman Path
sınıfı kullanmalısınız . Bu Path.Combine
, ayırıcıyı kendiniz belirtmeden yol oluşturmak için kullanılabilecek bir yöntem içerir .
Örnek kullanım:
string fullPath = System.IO.Path.Combine("C:", "Folder1", "Folder2", "file.txt");
\
aşağıdaki gibi Windows yerel dosya yolları ve ağ yolları için kullanılır:
C:\Windows\Temp\
veya \\NetworkSharedDisk\Documents\Archive\
/
aşağıdaki gibi standart URI'ler için gereklidir:
/
yolları da tanır (en az 7 tanedir).
/
yanıtta belirttiğim gibi standarad URI'lerde kullanımını göstermek için stackoverflow sayfasına veya herhangi bir web sitesi köprüsüne bağlamayı amaçladım.