Windows'ta maksimum dosya yolu uzunluğu kısıtlamalarını aşma


36

Müşterilerimizden biri alışılmadık bir şekilde çok uzun yol isimleri (uzun isimler içeren iç içe geçmiş klasörler) kullanmaktadır ve yolu 260 karakterden daha kısaltmak için rutin olarak "kullanıcı eğitimi sorunları" ile karşılaşıyoruz.

Mevcut bir teknik çözüm var mı, "evet, bu tarihi sorunları görmezden gel ve +260 karakter yolunun adını çalıştır" diyerek, Windows 7 ve Windows 2008 R2'de bir çeşit geçiş yapabiliriz.

PS Dosya Adlandırma, Yollar ve Ad Alanlarını Okudum ve Tamamen Değiştirildim


3
İşte 2018'deyiz ve sorun ROBOCOPY'da hala var. 255 sınırı. Onu aşanlar sadece bip sesi çıkarır ama kopyalamaz.
SDsolar

@SDsolar: robocopy'nin eski bir versiyonunu mu kullanıyorsunuz?
Naikrovek

Evet, aynısını söyleyecekti - özellikle robokopi kullanmak zorundaydı çünkü uzun yolları idare edebiliyordu ...
Rob

Yanıtlar:


12

Yöntemler var, ancak Microsoft dosya tarayıcı widget'ını yeniden kodlayana kadar bu eski sorunla hemen hemen sıkıştık. Alt optimal, ancak tam olarak böyle çalışıyor.


5
Birkaç işletim sistemi sürümü için düzeltilmemiş MS yazılımında hata var, bu yeni bir ...
Hubert Kario

2
Windows 10 1607 nihayet dosya tarayıcı problemini düzeltti ve bu garip yeni devasa dünyada çalışan Win32 uygulamaları kandırmak için bir sihirbazlığa sahip: howtogeek.com/266621/…
HackSlash

28

Sadece bir numaradan bahsediyorum, henüz burada bahsettiğimi görmedim.

Örneğin bu dosyayı alın:

C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf

Bu tam dosya yolu 290 karakter uzunluğundadır. Kabuk (Windows Gezgini) ve çoğu komut satırı yardımcı programı muhtemelen dokunmanıza izin vermez.

Bu substkomutu aşağıdaki gibi kullanın :

subst X: "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow"

Artık dosyaya erişebilir (ve silebilir, taşıyabilir, vb.):

X:\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf

Ve şimdi bu dosya adı yalnızca ~ 235 karakterdir, yani "Dosya adı çok uzun" sorunlarıyla daha fazla karşılaşmazsınız.

Windows API'sinde, olarak bilinen rezil bir sabit var MAX_PATH. MAX_PATH 260 karakterdir. NTFS dosya sistemi aslında 32.767 karaktere kadar olan dosya yollarını destekler. Ayrıca, Windows API işlevlerinin Unicode (veya "geniş") sürümlerine erişerek ve ayrıca yolu ön ekleyerek yine 32.767 karakter uzunluğunda yol adları kullanabilirsiniz \\?\.

MAX_PATHWindows dünyasında çok uzun zaman önce taştan yapılmıştır . Bence o zaman ANSI standartları ile ilgisi var ... ama Microsoft'un şu anda değiştirmesi çok zor olan şeylerden biri, şimdi de Microsoft tarafından yazılmış binlerce program ve uygulama kullandık. MAX_PATHve eğer sabit birden bire değişmiş olsaydı garip yeni yollarla başarısızlığa uğrayacaktı. (Arabellek taşması, yığın bozulması vb.)


9
substYalnızca birkaç hızlı değişiklik yapmak istiyorsanız, temizliği daha uygun olabilecek dizin bağlantılarını kullanarak benzer bir yaklaşım kullanıyorum. Kullandığım Bağlantı Shell Extension , ama sadece kullanabilirsiniz mklinkşöyle komutu: mklink /J C:\Wow "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow".
Charles Grunwald

10

\\? \ C: notasyonu kullanarak bu sınırlamayı aşabilirsiniz. Çirkin, ancak 2 ^ 15 dosya uzunluğunu destekliyor.

http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#maxpath


2
Evet dediğim gibi okudum (bağlantıma bakın). Fakat bundan tam olarak nasıl faydalanabilirim? Bir sürücüyü örneğin \\? \ İle eşleyebilir miyim. Anlamadım Makale, Windows API'leri kullanan programcılar için hazırlanmıştır. Gerektiği gibi .NET'te kod yaparken, C ++ vb kullanmıyorum ve bunun Windows Explorer'ı ve ortak dosya iletişim kutusunu vb. Kullanan müşterilerim için ne kadar uygun olduğunu göremiyorum.
Christopher Edwards

1
Sonuçta, hiçbiri yoktur. : - / Ne yazık ki.
Chris K,

@ChristopherEdwards Klasör hiyerarşisinde daha düşük noktalara kavşaklar oluşturabilirsiniz.
Hubert Kario

1
c:\usr-data@ChristopherEdwards `c: \ Users \ VeryLongUserName \ LongFolderName` e bir bağlantı yapabilir ve ona eski olanı kullanmasını söyleyebilirsiniz, ancak düzenli bir şekilde 40 karakterlik bir klasöre klasörler eklerse bu yardımcı olmaz ...
Hubert Kario

2
7-zip, neye mal olursa olsun, \\? \ C: notasyon içinde mutlu bir şekilde gezinecak ve kopyalayacaktır.
Matt Lyons

9

Microsoft, artık Windows 10'da, Dosya Adlandırma, Yollar ve Ad Alanları MSDN makalesinde açıklandığı şekilde kullanılabilen bir düzeltmeye sahiptir .

darthcoder daha önce belirtilen \\?\C:gösterimdeki detaylarla cevap verdi , ancak artık HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)tek bir sistem için MAX_PATH sınırlamalarını kaldırmak için kullanılabilecek bir kayıt defteri anahtarı var . Makalede ayrıca, Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long pathsorganizasyonda Grup İlkesi kontrolü için destek veya gerekirse grup çapında uygulama konusunda destek verilmektedir.


Kapsamlı bir sınama için zamanım olmadı, ancak şu ana kadar bu çözümle ilgili karışık sonuçlar gördüm ve bunun Windows [dosya] Gezgini için sorunu çözdüğünü onaylayamıyorum.
JimNim

2
Bu, Dosya Gezgini'nde çalışmaz, çünkü sistem ve NTFS uzun yolları işleyebilse de, Gezginin kendisi yeniden kodlanıncaya kadar kullanamaz.
18'de

PS, gerçekten çalışması için Explorer'ın üstündeki bu SO bağlantısında kopya programlarından birini kullanmanız gerekecek .
18'de

1
İyi bilgi! Muhtemelen bu durumda Robocopy'ye bağlı kalacağım.
JimNim
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.