NTFS'de maksimum dosya adı uzunluğu (Windows XP ve Windows Vista)?


261

Yüklenen dosyaların dosya adlarını tutacak bir veritabanı tablosu tasarlıyorum. Windows XP veya Vista tarafından kullanılan NTFS'deki dosya adının maksimum uzunluğu nedir?


83
Basit bir soru olması gereken şeylere bu kadar çok farklı cevap görmedim. 199, 255, 256, 257, 260, 'yaklaşık 30000', 'yaklaşık 32000' ve 'duruma bağlıdır'. Tabii, niteleyiciler var, ama bunların hepsi doğru olamaz değil mi?
MickeyfAgain_BeforeExitOfSO

7
255 tanesinde, kurumsal kullanıcıların buna ulaşmasını engellemek için bir uygulama oluşturmak zorunda olduğum için bunu biliyorum, çünkü depolama sunucularımızda sorunlara neden oluyor.
RobertPitt

2
@RobertPitt. Orada bir şey eksik. MSDN'den Alıntı: "Bir yol için maksimum uzunluk 260 karakter olarak tanımlanan MAX_PATH"
Michael Olesen

7
Michael9000 @. RobertPitt'in dosya adı sınırını (bu sorunun ne olduğu) alıntıladığına inanıyorum, yol sınırı değil.
gdw2

7
NTFS, MAX_PATH ile sınırlı DEĞİL, Windows Kabuğu MAX_PATH ile sınırlı, NTFS maksimum yol uzunluğu 32k
paulm

Yanıtlar:


286

Bir dosya adının tek tek bileşenleri (yani yol üzerindeki her alt dizin ve son dosya adı) 255 karakterle sınırlıdır ve toplam yol uzunluğu yaklaşık 32.000 karakterle sınırlıdır.

Ancak, Windows'ta MAX_PATHdeğeri aşamazsınız (dosyalar için 259 karakter, klasörler için 248). GörmekTüm ayrıntılar için http://msdn.microsoft.com/en-us/library/aa365247.aspx .


4
İşte bu yanıtı onaylayan bazı gerçekler (Windows normalde 260 karakterle sınırlıdır): msdn.microsoft.com/en-us/library/… ve blogs.msdn.com/b/bclteam/archive/2007/02/13 /…
Michael Olesen

62
Sağladığınız bağlantıya göre NTFS için doğru, Windows için doğru değil: "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." Toplam yolu 259 karakterle sınırlı tüm pratik amaçlar için, (boş sonlandırıcı için izin vermek).
Lawrence Dol

9
Görünüşe göre, Windows API dosya yöntemlerinin "unicode sürümü" kullanıyorsanız, "\\? \" İle yol adlarının önüne önek eklerseniz 32767'ye kadar alabilirsiniz?
rogerdpack

6
@ rogerdpack: tam yol için, evet, ancak her bir bileşenin (alt klasör / son dosya) 255 utf-16 kod noktası sınırı vardır. Artı, normal yazılım MAX_PATH bekliyor, bu yüzden ... patlama :)
snemarch

5
Windows'un 10 (Version 1607 - Yıldönümü Güncelleme) ve Windows Server 2016 Bir grup ilkesi girişi Bilgisayar Yapılandırması altında NTFS uzun yolları etkinleştirmek geçersiz kılarak MAX_PATH sorunu görmezden bir seçenek için dikiş -> Yönetici Şablonları -> Sistem -> FileSystem:
Steven Mark Ford

28

257 karakterdir. Kesin olmak gerekirse: NTFS'nin kendisi birkaç bin karakterden oluşan en fazla dosya adı uzunluğu empoze eder (yaklaşık 30.000 bir şey). Ancak Windows, Yol + Dosya Adı için maksimum 260 uzunluk uygular. Drive + klasörü en az 3 karakter alır, böylece 257 ile sonuçlanırsınız.


21
Yanlış - NUL sonlandırıcı, MAX_PATH değerinin bir parçasıdır ve bu da sizi maksimum 256 karakter yoluyla bırakır (ki bu, tek tek bileşen sınırı 255 nedeniyle oluşturamazsınız).
snemarch

4
"255'in bireysel bileşen sınırı nedeniyle oluşturamayacağınız" Yanlış. Burada maksimum bireysel yol bileşenleri uzunluğundan değil, maksimum yol uzunluğundan bahsediyoruz. Ayrıca "Bir dizin oluşturmak için bir API kullanırken, belirtilen yol bir 8.3 dosya adı ekleyemeyeceğiniz kadar uzun olamaz (yani, dizin adı MAX_PATH eksi 12'yi aşamaz)."
Ludovic Kuty

Bu tartışma yalnızca, düşük düzeyli API'nin 256 karakterlik boş değer olduğu varsayımıyla 256 karakterlik dosya adları oluşturulmasına izin verdiğinden, ancak dosyanın yerel uygulamalara erişilemediğinden (gizli), bu nedenle genellikle yararlı olmadığından kaynaklanır.
Conrad B

1
@LudovicKuty: Aslında OP yol uzunluğu değil dosya adı uzunluk sınırlaması hakkında konuşuyordu (evet, orijinal revizyonda bile kontrol ettim). Ve özellikle işletim sistemi, belirli bir alt sistem veya API veya çerçeve sınırlarına değil NTFS sınırlarına atıfta bulunuyordu.
0xC0000022L

@ 0xC0000022L Evet. OP sorusunda yanlış okudum ve dosya adı uzunluğu ve yol uzunluğu hakkında konuşan yorumlara odaklandım.
Ludovic Kuty

27

Uzun bir dosya adına sahip bir dosyayı kaydetmeye çalışırken "İşlenmeyen özel durum" çerçeve 4.5'te bunu söyler:

Belirtilen yol, dosya adı veya her ikisi de çok uzun. Tam nitelikli dosya adı 260 karakterden az olmalı ve dizin adı 248 karakterden az olmalıdır .

ekran görüntüsü


16

199 Windows XP NTFS'de, yeni kontrol ettim.

Bu teori değil, sadece dizüstü bilgisayarımda denemekten. Hafifletici etkiler olabilir, ancak fiziksel olarak daha büyük yapmama izin vermez.

Bunu sınırlayan başka bir ayar var mı acaba? Kendiniz deneyin.


1
XP versiyonumda bunu doğruladım, ne acı
Julian Young

Aynısını sadece bir kıkırdama için Windows XP'de yaptım. 200 karakterle bir sınıra girdim. Daha sonra 255 kez bir dosya oluşturdum w, sildim ve Windows 7 x64'te aynı ada sahip bir klasör oluşturdum. Şimdi soru burada sınırlayıcı faktör nedir: NTFS sürümü, işletim sistemi veya alt sistem veya XP'de Win32 API?
0xC0000022L

200 karakterlik sınırın kaşif olduğu anlaşılıyor. Diğer programlar daha uzun dosya adları oluşturabilir. Bu muhtemelen kullanıcıyı kendisinden kurtarmak için kasıtlı bir sınırdır. :-)
avl_sweden

13

MSDN'ye göre , 260 karakter. O içerir"<NUL>" gerçek uzunluğu 259 olacak şekilde, -the görünmez sonlandırıcı boş karakter.

Ancak makaleyi okuyun, biraz daha karmaşık.


1
Aslında, başvurulan MSDN makalesi yolun 260 karakterle sınırlı olduğunu , ancak dosya adının uzunluğunun dosya sistemine bağlı olduğunu (ancak genellikle 255 bayt) olduğunu söylüyor . Ancak, yol sınırını 32767 bayta yükseltmek için "Unicode sürümleri [Windows API işlevlerinin]" kullanılması mümkündür, ancak bu sınır \\?\ çalışma zamanında gerekli öneki dahili olarak belirli bir uzunluğa genişleten pencereler tarafından azaltılır . Bu genişletmeden sonra yol 32767 baytın altında kalmalıdır.
Mikko Rantalainen

13

NTFS'deki uzunluk 255'tir. NameLengthNTFS $Filenameözniteliğindeki alan, ofseti olmayan bir bayttır; bu 0-255 arasında bir aralık verir.

Dosya adı farklı "ad alanlarında" olabilir. Şimdiye kadar: POSIX, WIN32, DOS ve (WIN32DOS - bir dosya adı yerel olarak bir DOS adı olduğunda). (Dizi uzunluğu sahip olduğu için, bu olabilir \ 0 içerebilir, ancak bu problemlere verim ve yukarıda ad alanlarında değildir olacaktır.)

Böylece bir dosya veya dizinin adı en fazla 255 karakter olabilir. Windows altında tam yolunu belirtirken, gerek birlikte yolunu önüne \\? \ (Veya kullanım \\? \ UNC UNC yolları için \ sunucu \ paylaşım) genişletilmiş uzunlukta biri olarak bu yolu işaretlemek için (~ 32k karakter) . Yolunuz daha uzunsa, çalışma dizininizi yol boyunca ayarlamanız gerekir (süreç genelindeki ayar nedeniyle ugh - yan etkiler).




4

Bunu yukarıda onaylanan cevaba ekliyorum.

TEMİZ OLMAK İÇİN, insanların 255-260 karakter olduğuna inanmasının nedeni, Windows Gezgini'nin desteklediği tek şey olmasıdır. Dosya adlarında bundan daha uzun bir dosya kopyası gibi bir şey yapmak hata verir. Ancak, bir program çok daha uzun dosya adlarını okuyabilir ve yazabilir (bu, Explorer'ın şikayetçi olduğu uzunluklara nasıl ulaşırsınız). Bu gibi durumlarda Microsoft'un "önerilen düzeltmesi", dosyayı özgün programda açıp yeniden adlandırmaktır.


Vim ile komut satırından kesinlikle 260 + karakter aşan bir klasör hiyerarşisi derin bir dosya kaydetmeye çalıştım ama başarısız oldu.
panny

@panny: Vim'in yazarları uzun yol adlarını uygulamaya özen göstermediler. Bu ne suçlanacak bir Windows ne de Win32 alt sistemi ya da OP'nin sorduğu NTFS için dosya adı uzunluğu sınırlamasıyla ilgisi yoktur .
0xC0000022L

3

Yeni Windows SDK belgelerine (8.0) göre yeni bir yol sınırı sağlanmış gibi görünüyor. Aşağıdaki gibi yeni bir yol işleme işlevleri kümesi ve PATHCCH_MAX_CCH tanımı vardır:

// max # of characters we support using the "\\?\" syntax
// (0x7FFF + 1 for NULL terminator)
#define PATHCCH_MAX_CCH             0x8000

3
Ancak Windows 8 gezgini (benim durumumda Win8.1 Önizleme) bu sınırla çalışmıyor ve 259 karakterden uzun yolları kabul etmiyor.
Cplusminus_is_coming

3

Resmi belgelerin bu kısmı NTFS, exFAT ve FAT32 için 255 Unicode karakter ve UDF için 127 Unicode veya 254 ASCII karakter olduğunu açıkça belirtmektedir .

Bunun dışında, maksimum yol adı uzunluğu her zaman 32.760 Unicode karakterdir ve her yol bileşeni 255 karakterden fazla değildir.


Yeterince yakın. Kabul edilen cevaba yapılan bir yorumda belirttiğim gibi, bu 32767 WCHARelementtir. Hayır, bu değil "Unicode karakterler" (!: ... kod noktaları, karakterler vb Unicode terminolojiyi kontrol edin).
0xC0000022L


-2

238! Win7 32 bit altında aşağıdaki yarasa komut dosyası ile kontrol ettim:

set "fname="
for /l %%i in (1, 1, 27) do @call :setname
@echo %fname%
for /l %%i in (1, 1, 100) do @call :check
goto :EOF
:setname
set "fname=%fname%_123456789"
goto :EOF
:check
set "fname=%fname:~0,-1%"
@echo xx>%fname%
if not exist %fname% goto :eof
dir /b
pause
goto :EOF

Uzun yolları doğru işleyen bir programla Windows 7 altında kontrol ettim. Her ayrı yol segmenti 255 karakter alabilir (kullandım w). Peki şimdi ne olacak?
0xC0000022L

-2

Aslında 256, bkz. Dosya Sistemi İşlev Karşılaştırması, Limitler .

Http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html adresinde bir yayını tekrarlamak için

"FAT32'den değil NTFS'den bahsettiğimizi varsayarsak," yol + dosya için 255 karakter "Explorer'ın bir sınırlamasıdır, dosya sisteminin kendisi değildir. NTFS, her bir bileşen 255 karaktere kadar 32.000 Unicode karakter uzunluğundaki yolları destekler.

Explorer -ve Windows API- yolu için sürücü harfi, iki nokta üst üste, eğik çizgi ayırma ve son boş karakter içeren 260 karakterle sınırlar. Windows'ta \\"" ile başlatırsanız daha uzun bir yol okumak mümkündür.

Yukarıdaki yazıları okuduysanız, emin olabileceğiniz 5. bir şey olduğunu göreceksiniz: En az bir inatçı bilgisayar kullanıcısı bulmak!


4
Hayır - 255'tir. NTFS $ Dosyaadı özniteliğindeki NameLength alanı, ofseti olmayan bir bayttır; bu 0-255
Dominik Weber

-2

WS 2012 Gezgini'nde 224'ten uzun adı + nokta + genişletme içeren bir dosya oluşturamıyorum karakterden . Elçiyi vurma!

Aynı sunucunun CMD'sinde 235 karakterden daha uzun bir ad oluşturamıyorum:

Sistem belirtilen yolu bulamıyor.

Explorer'da oluşturulan 224 karakterli bir dosya Notepad ++ ile açılamaz - bunun yerine yeni bir dosya ile birlikte gelir.


The system cannot find the path specified.ile aynı değildir The specified path, file name, or both are too long.. Sanırım bir yazım hatası falan vardı. Varolmayan bir yolda dosya oluşturmaya çalışırsanız veya var olmayan bir yöne gitmek isterseniz bu iletiyi alırsınız.
Matthias Burger
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.