Windows'un işleyebileceği en uzun dosya yolu nedir?


Yanıtlar:


48

Maksimum Yol Uzunluğu (MSDN'den)

Windows API'sinde (aşağıdaki paragraflarda açıklanan bazı istisnalar dışında), bir yol için maksimum uzunluk 260 karakter olarak tanımlanan MAX_PATH'dir . Yerel bir yol aşağıdaki sırayla yapılandırılır: sürücü harfi, iki nokta, ters eğik çizgi, ters eğik çizgilerle ayrılmış bileşenler ve sonlandırıcı boş karakter. Örneğin, D sürücüsündeki maksimum yol "D: \ <bazı 256 karakter yolu dizgisi> <NUL>" dür, burada "<NUL>" geçerli sistem kod sayfası için görünmez sonlandırıcı boş karakter gösterir. (<> Karakterleri burada görsel netlik için kullanılır ve geçerli bir yol dizesinin parçası olamaz.)


4
Bu limiti aşan yolları `\\? 'İle ekleyerek başa çıkabileceğinizi belirtmelisiniz (Sanırım bu karakter dizisiydi).
Joey,

3
ayrıca 2. paragrafta belirtilen unicode-yollar için limiti de belirtmelisiniz: ~ 32k
akira

260? Sürücü yok sayılıyor 256 karakter: \ ve sonlandırıcı. 2009, neden oynamamız için sadece bir baytlık karakter alıyoruz?
Phoshi

@Phoshi Daha uzun yolları kullanmak için API'ler varsayılan olarak OS tarafından kullanılmaz, çünkü isteğe bağlı olarak uzun dizgilerden, yolun asla 260 karakterden daha uzun olamayacağını ve sabit bir uzunluk ayırmaya karar verdiğini bilen geliştiriciler tarafından kötü yazılmış uygulamalara aktarmak Tutmak için dizilim, uygulamaların çökmesine ve / veya istismar edilmesine yol açan çok sayıda tampon taşmasıyla sonuçlanacaktır. Aynı yanlış bilgiye sahip olan geliştiricilerin biraz daha iyi uygulamaları, yollarının geçerliliği çok uzun bir hata bildirdiği için iptal olur.
Dan Neely

15

XP dosya yolu - 250 karakter

Vista dosya yolu - 260 karakter

Temiz bir Windows XP kurulumunda en uzun yol 152 karakterdir.

Windows Vista'nın yarı temiz kurulumundaki en uzun yol 195 karakterdir:

Windows XP, 255 karakter uzunluğunda dosya adlarına izin verir.

Windows Vista, 260 karaktere kadar olan daha uzun dosya adlarına izin verir.

http://www.codinghorror.com/blog/archives/000729.html


5
bu, limiti biraz uzatan unicode-api'yi kullanmazsanız geçerlidir (~ 32k, bkz. msdn.microsoft.com/en-us/library/… )
akira

1
hmmm. Bu oranda, Win7'deki limit yaklaşık 265 karakter olmalı, değil mi?
quack quixote

Sınırı neden on karakter artıracaklar? Buna değmez, değil mi? \
Phoshi

bu yanlış. Maksimum dosya adı uzunluğu, herhangi bir Windows'da hala 255 karakterdir, çünkü NTFS sınırı budur
phuclv

8

Windows sabiti MAX_PATH260'a eşittir, ancak diğer cevapların söylediği gibi, en uzun yol 32767.

Buraya bakınız .

32k UNICODE kullanırken, ancak şimdi onu kullanmalıyız, bu yüzden bu maksimum yol uzunluğunu da kullanmalıyız.

Ayrıca, maksimum yol uzunluğu hakkında daha ayrıntılı bazı şeyler açıklayan SO'daki cevabımı da inceleyebilirsiniz .


1

"Klasik" sınırı 260 karakter drive letter+ :\+ 255 characters of filename+ \(veya yuvarlama için) + null terminatorgibi diğer yanıtlar söyledi

Ancak, gerçek iç sınır 32767 karakterdir ve bu da tam olarak nitelenmiş bir yol\\?\ bulmak için elde edilebilir

Windows API, maksimum toplam yol uzunluğu 32,767 karakter için uzatılmış uzunlukta bir yola izin vermek için Unicode sürümlerine sahip birçok fonksiyona sahiptir. Bu yol türü, her biri işlev lpMaximumComponentLengthparametresinde döndürülen değere kadar ters eğik çizgilerle ayrılmış bileşenlerden oluşur GetVolumeInformation(bu değer genellikle 255 karakterdir). Bir uzatılmış yol belirtmek için "\\?\"öneki kullanın . Örneğin, "\\?\D:\very long path".

Bazı nedenlerden dolayı, tam nitelikli yollar kullanılamıyorsa, daha derin dizinlere bir sürücü harfine subst/ ile diskpartveya daha sonra yolu kısaltmak için bir bağlantı / sembolik bağlantı oluşturarak erişilebilir.

Windows 10'dan MAX_PATHberi, varsayılan olarak olmasa da , sınır da kaldırılmıştır.

Windows 10, sürüm 1607'den başlayarak MAX_PATH, genel Win32 dosyalarından ve dizin işlevlerinden sınırlamalar kaldırılmıştır. Ancak, yeni davranışa katılmalısınız.

https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file

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.