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?
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?
Yanıtlar:
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_PATH
değ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 .
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.
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 .
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.
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?
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.
\\?\
ç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.
NTFS'deki uzunluk 255'tir. NameLength
NTFS $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).
255 karakter.
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.
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
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.
WCHAR
elementtir. Hayır, bu değil "Unicode karakterler" (!: ... kod noktaları, karakterler vb Unicode terminolojiyi kontrol edin).
255 karakter olsa da, tam yol da bundan daha uzun olmamalıdır. Wikipedia'da bununla ilgili güzel bir tablo var: http://en.wikipedia.org/wiki/Filename .
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
w
). Peki şimdi ne olacak?
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!
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.