Projektuję tabelę bazy danych, w której będą przechowywane nazwy plików przesyłanych plików. Jaka jest maksymalna długość nazwy pliku w systemie plików NTFS używanego przez system Windows XP lub Vista?
Projektuję tabelę bazy danych, w której będą przechowywane nazwy plików przesyłanych plików. Jaka jest maksymalna długość nazwy pliku w systemie plików NTFS używanego przez system Windows XP lub Vista?
Odpowiedzi:
Poszczególne elementy nazwy pliku (tj. Każdy podkatalog wzdłuż ścieżki i końcowa nazwa pliku) są ograniczone do 255 znaków, a całkowita długość ścieżki jest ograniczona do około 32 000 znaków.
Jednak w systemie Windows nie można przekroczyć MAX_PATH
wartości (259 znaków dla plików, 248 dla folderów). Widziećhttp://msdn.microsoft.com/en-us/library/aa365247.aspx, aby uzyskać szczegółowe informacje.
Ma 257 znaków. Mówiąc dokładniej: sam NTFS narzuca maksymalną długość nazwy pliku wynoszącą kilka tysięcy znaków (około 30'000 coś). Jednak system Windows narzuca maksymalną długość 260 dla ścieżki + nazwy pliku. Folder drive + zajmuje co najmniej 3 znaki, więc kończy się na 257.
Oto, co mówi „Nieobsługiwany wyjątek” w środowisku 4.5 podczas próby zapisania pliku o długiej nazwie pliku:
Podana ścieżka, nazwa pliku lub oba są za długie. W pełni kwalifikowana nazwa pliku musi mieć mniej niż 260 znaków, a nazwa katalogu musi mieć mniej niż 248 znaków.
199 na Windows XP NTFS, właśnie sprawdziłem.
To nie jest teoria, ale po prostu przymierzanie laptopa. Mogą występować efekty łagodzące, ale fizycznie nie pozwoli mi to zwiększyć.
Zastanawiam się, czy jest jakieś inne ustawienie, które to ogranicza. Wypróbuj sam.
w
, usunąłem go i utworzyłem folder o tej samej nazwie w systemie Windows 7 x64. Teraz pytanie brzmi, co jest tutaj czynnikiem ograniczającym: wersja NTFS, system operacyjny lub podsystem lub interfejs API Win32 w XP?
Według MSDN ma 260 znaków. Obejmuje"<NUL>"
niewidoczny kończący znak zerowy, więc rzeczywista długość wynosi 259.
Ale przeczytaj artykuł, jest to trochę bardziej skomplikowane.
\\?\
w czasie wykonywania do określonej nieokreślonej długości. Po tym rozszerzeniu ścieżka musi pozostać poniżej 32767 bajtów.
Długość w NTFS wynosi 255. NameLength
Pole w $Filename
atrybucie NTFS to bajt bez przesunięcia; daje to zakres 0-255.
Nazwa pliku może znajdować się w różnych „przestrzeniach nazw”. Do tej pory są to: POSIX, WIN32, DOS i (WIN32DOS - kiedy nazwa pliku może być natywnie nazwą DOS). (Ponieważ łańcuch ma długość, może zawierać \ 0, ale może to powodować problemy i nie znajduje się w powyższych obszarach nazw).
Dlatego nazwa pliku lub katalogu może mieć do 255 znaków. Określając pełną ścieżkę w systemie Windows, należy poprzedzić ją \\? \ (Lub użyć \\? \ UNC \ server \ share dla ścieżek UNC), aby oznaczyć tę ścieżkę jako ścieżkę o rozszerzonej długości (~ 32 tys. Znaków) . Jeśli twoja ścieżka jest dłuższa, będziesz musiał ustawić katalog roboczy po drodze (ugh - skutki uboczne ze względu na ustawienie całego procesu).
255 znaków.
Dodaję to do powyższej zatwierdzonej odpowiedzi.
ABY BYĆ CZYSTY, powodem, dla którego ludzie uważają, że jest to 255-260 znaków, jest to wszystko, co obsługuje Eksplorator Windows. Błąd spowoduje zrobienie czegoś takiego jak kopia pliku na nazwach plików dłuższych niż to. Jednak program może odczytywać i zapisywać znacznie dłuższe nazwy plików (w taki sposób dochodzisz do długości, na które Explorer narzeka w pierwszej kolejności). „Zalecaną poprawką” firmy Microsoft w takich sytuacjach jest otwarcie pliku w oryginalnym programie, który go napisał, i zmiana jego nazwy.
Według nowej dokumentacji zestawu Windows SDK (8.0) wydaje się, że wprowadzono nowy limit ścieżek. Istnieje nowy zestaw funkcji do obsługi ścieżek i definicja PATHCCH_MAX_CCH, jak poniżej:
// max # of characters we support using the "\\?\" syntax
// (0x7FFF + 1 for NULL terminator)
#define PATHCCH_MAX_CCH 0x8000
Ta część oficjalnej dokumentacji wyraźnie mówi, że jest to 255 znaków Unicode dla NTFS, exFAT i FAT32 oraz 127 znaków Unicode lub 254 znaki ASCII dla UDF.
Poza tym maksymalna długość nazwy ścieżki wynosi zawsze 32 760 znaków Unicode, przy czym każdy składnik ścieżki nie może mieć więcej niż 255 znaków.
WCHAR
elementów. Nie, to nie są „znaki Unicode” (sprawdź terminologię Unicode: punkty kodowe, znaki itp.!).
255 znaków, choć pełna ścieżka również nie powinna być dłuższa. W Wikipedii znajduje się ładny stół na ten temat: http://en.wikipedia.org/wiki/Filename .
238! Sprawdziłem to pod Win7 32 bit z następującym skryptem nietoperza:
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
). Co teraz?
W rzeczywistości jest to 256, zobacz Porównanie funkcjonalności systemu plików, limity .
Aby powtórzyć post na http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html
„Zakładając, że mówimy o NTFS, a nie FAT32,„ 255 znaków dla ścieżki + pliku ”jest ograniczeniem Eksploratora, a nie samego systemu plików. NTFS obsługuje ścieżki o długości do 32 000 znaków Unicode, przy czym każdy składnik może zawierać do 255 znaków.
Eksplorator - i interfejs Windows API - ogranicza ścieżkę do 260 znaków, które obejmują literę dysku, dwukropek, oddzielające ukośniki i kończący znak zerowy. Dłuższą ścieżkę można odczytać w systemie Windows, jeśli zaczniesz od
\\
„
Jeśli przeczytasz powyższe posty, zobaczysz, że jest piąta rzecz, której możesz być pewien: Znalezienie co najmniej jednego upartego użytkownika komputera!
Nie mogę utworzyć pliku o nazwie + kropka + rozszerzenie w WS 2012 Explorer dłużej niż 224 znaki. Nie strzelaj do posłańca!
W CMD tego samego serwera nie mogę utworzyć nazwy dłuższej niż 235 :
System nie może odnaleźć określonej ścieżki.
Pliku o nazwie 224 znaków utworzonego w Eksploratorze nie można otworzyć w Notepad ++ - zamiast tego pojawia się nowy plik.
The system cannot find the path specified.
to nie to samo co The specified path, file name, or both are too long.
. Chyba miałeś literówkę lub coś takiego. Otrzymujesz ten komunikat, jeśli próbujesz utworzyć plik w ścieżce, która nie istnieje lub jeśli chcesz przejść w kierunku, który nie istnieje.