NTFS, 32.000 karakter uzunluğunda yollara izin verirken , Win32 API'sinin 259 karakterlik yol uzunluğu sınırlamasını buldunuz .
Windows API'sinde ([bağlantılı belgede] açıklanan bazı istisnalar dışında), bir yol için maksimum uzunluk MAX_PATH
260 karakter olarak tanımlanır.
(Ek NULL
olarak yola 259 kullanılabilir karakter veren bir sonlandırma karakteri de eklenmiştir.)
Explorer (ve hemen hemen tüm Windows uygulamalarının) dosya sistemi erişimi için Win32 API'sine güvendiğinden , mümkün olsa bile bu sınırlamanın üstesinden gelmek pratik değildir :
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 lpMaximumComponentLength
parametresinde döndürülen değere kadar ters eğik çizgilerle ayrılmış bileşenlerden oluşur GetVolumeInformation
(bu değer genellikle 255 karakterdir). Uzun bir yol belirtmek için "\\? \" Ön ekini kullanın. Örneğin, "\\? \ D: \ çok uzun yol ".
Ne yazık ki, sadece \\?\D:\very long path
bir Explorer penceresine yazamazsınız. Uygulama, bu API'lerden yararlanmak ve çok uzun yol adlarını işlemek için tasarlanmış olmalıdır.
Windows altında erişim genişletilmiş uzunlukta yolları bir yolu yüklemektir Cygwin , Windows için bir * Nix emülasyona. Testlerimde, Cygwin MAX_PATH
; bash ve vi'nin 2000 karakter uzunluğundaki yolları ile hiçbir problemi yoktu.
Genişletilmiş uzunluktaki yollara göz atmak için bash kullanabilseniz de, normal Windows uygulamalarında bu yollardaki dosyaları açamayacağınızı unutmayın. Örneğin notepad
, çalışma dizini genişletilmiş bir yoldayken yazmak sizi
Hata: Geçerli çalışma dizininin bir Win32 çalışma dizini için izin verilenden daha uzun bir yolu var. Yerel Windows uygulamasını buradan başlatamıyorum.
Ve denemek notepad "\\?\D:\very long path\file.txt"
de işe yaramıyor; başlattı, ancak sadece "Dosya bulunamıyor ..." diyor . Notepad ++ ile aynı şekilde denenmesi çöküyor. (Muhtemelen bir arabellek taşması.)
Belirli bir uzunluğa sahip bir yolun içine gömülü belirli dosyalara erişme seçeneğiniz, bir NTFS bağlantı noktası oluşturarak yolun kendisini kısaltmaktır . Yükseltilmiş bir komut isteminden:
D:\> mklink /J jct "\\?\D:\very\long\path"
Artık içeriğine erişebilir D:\very\long\path\
dan D:\jct\
. Explorer ve diğer uygulamalar söz konusu olduğunda, yol yalnızca D:\jct\
(veya her neyse) olduğu için hiçbir yol uzunluğu sorunuyla karşılaşmazsınız . NTFS sürücüsü yolu ("yeniden inceleme noktası") şeffaf bir şekilde yönlendirmeyi işler.
Bu yaklaşımın dezavantajı, erişmek istediğiniz dosyanın yakınında bir kavşak oluşturmanız gerektiği açıktır; Dizin yapısının tamamına göz atamazsınız.
Özel karakterler ( " * : < > ? \ |
) ile ilgili olarak, sadece bir no-go. Bu karakterlerin Windows içerisinde özel anlamları vardır, bu yüzden bunları yollarda kullanmak mümkün değildir. (Cygwin, özel karakterlere sahip dosyalar oluşturmanıza izin verir, ancak bunu karakterleri özel Unicode karakterleriyle değiştirerek yapar, okuduğunda geri alır. Bu Cygwin tarafından oluşturulan dosyaları Linux altında veya Explorer'da görüntülemek doğru olmaz, çünkü Unicode karakterler yerine kullanılmaz.)
Bütün bunlar, çok uzun yollar gerektiren ne yapıyorsunuz? Belki de yaptığınız işi yeniden değerlendirip uzun yollardan kaçınarak yaşamınızı kolaylaştırabilirsiniz. Muhtemelen, zaten bu kadar uzun yollara ihtiyacınız yok .