Jaka jest najdłuższa ścieżka do pliku obsługiwana przez system Windows?

57

Jaka jest najdłuższa ścieżka do pliku obsługiwana przez system Windows?

Ron Tuffin
źródło

Odpowiedzi:

48

Maksymalna długość ścieżki (z MSDN)

W interfejsie API systemu Windows (z pewnymi wyjątkami omówionymi w poniższych akapitach) maksymalna długość ścieżki wynosi MAX_PATH, która jest zdefiniowana jako 260 znaków . Ścieżka lokalna ma następującą kolejność: litera dysku, dwukropek, ukośnik odwrotny, komponenty oddzielone ukośnikami odwrotnymi i kończący znak null. Na przykład maksymalna ścieżka na dysku D to „D: \ <łańcuch ścieżki o długości 256 znaków> <NUL>”, gdzie „<NUL>” reprezentuje niewidoczny kończący znak zerowy dla bieżącej strony kodowej systemu. (Znaki <> są tutaj używane dla przejrzystości wizualnej i nie mogą być częścią prawidłowego ciągu ścieżki.)

Adam Matan
źródło
4
Powinieneś wspomnieć, że możesz obsługiwać ścieżki przekraczające ten limit, poprzedzając go `\\?` (Myślę, że to była ta sekwencja znaków).
Joey
3
powinieneś również podać limit ścieżek Unicode wymienionych w drugim akapicie: ~ 32k
akira
260? 256 znaków ignorujących dysk: \ i terminator. Jest rok 2009, dlaczego mamy tylko bajt postaci do zabawy?
Phoshi
@ Phoshi Interfejsy API do używania dłuższych ścieżek nie są domyślnie używane przez system operacyjny, ponieważ przekazywanie arbitralnie długich ciągów do aplikacji, które zostały źle napisane przez programistów, którzy wiedzieli, że ścieżka nie może być dłuższa niż 260 znaków i zdecydowali się przydzielić stałą długość tablica, która go utrzyma, spowodowałaby ogromną liczbę przepełnień bufora, prowadząc do awarii aplikacji i / lub wykorzystania. Nieco lepsze implementacje deweloperów z tą samą niewiedzą zostałyby przerwane, ponieważ ich sprawdzanie poprawności ścieżki zgłosiło zbyt długi błąd.
Dan Neely
15

Ścieżka do pliku XP - 250 znaków

Ścieżka do pliku Vista - 260 znaków

Najdłuższa ścieżka czystej instalacji systemu Windows XP to 152 znaki.

Najdłuższa ścieżka w częściowo czystej instalacji systemu Windows Vista to 195 znaków:

System Windows XP zezwala na nazwy plików o długości do 255 znaków

Windows Vista pozwala na jeszcze dłuższe nazwy plików zawierające do 260 znaków.

http://www.codinghorror.com/blog/archives/000729.html

Joe
źródło
5
jest to prawdą, jeśli nie używasz interfejsu Unicode-API, który nieco rozszerza limit (~ 32k, patrz msdn.microsoft.com/en-us/library/… )
akira
1
hmmm. w takim tempie limit w Win7 powinien wynosić około 265 znaków, prawda?
quack quixote
Dlaczego mieliby zwiększać limit o dziesięć znaków? Nie wydaje się tego warte, prawda: \
Phoshi
to jest niepoprawne. Maksymalna długość nazwy pliku to nadal 255 znaków w dowolnym systemie Windows, ponieważ jest to limit NTFS
phuclv
8

Stała Windows MAX_PATHjest równa 260, jak mówią inne odpowiedzi, jednak najdłuższa ścieżka to 32767.

Zobacz tutaj .

32k używa UNICODE, ale teraz musimy go użyć, więc powinniśmy również użyć takiej maksymalnej długości ścieżki.

Możesz także zapoznać się z moją odpowiedzią w SO, która wyjaśnia niektóre rzeczy bardziej szczegółowe na temat maksymalnej długości ścieżki.

ST3
źródło
1

„Klasyczny” limit wynosi 260 znaków: drive letter+ :\+ 255 characters of filename+ \(lub do zaokrąglania) + null terminatorjak powiedział w innych odpowiedzi

Jednak prawdziwy wewnętrzny limit to 32767 znaków, który można osiągnąć, dodając, \\?\aby uzyskać w pełni kwalifikowaną ścieżkę

Interfejs API systemu Windows ma wiele funkcji, które również mają wersje Unicode, co pozwala na ścieżkę o rozszerzonej długości dla maksymalnej całkowitej długości ścieżki wynoszącej 32 767 znaków. Ten typ ścieżki składa się z komponentów oddzielonych ukośnikami odwrotnymi, każdy do wartości zwracanej w lpMaximumComponentLengthparametrze GetVolumeInformationfunkcji (ta wartość to zwykle 255 znaków). Aby określić ścieżkę o przedłużonej długości, użyj "\\?\"prefiksu. Na przykład "\\?\D:\very long path".

Jeśli z jakichś powodów nie można użyć w pełni kwalifikowanych ścieżek, można uzyskać dostęp do głębszych katalogów poprzez zamontowanie litery dysku za pomocą subst/ diskpartlub utworzenie połączenia / dowiązania symbolicznego w celu skrócenia ścieżki

Od Windows 10 MAX_PATHlimit został również usunięty, chociaż nie jest domyślnie

Począwszy od systemu Windows 10, wersja 1607, MAX_PATHograniczenia zostały usunięte z typowych funkcji plików i katalogów Win32. Musisz jednak wyrazić zgodę na nowe zachowanie.

https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file

phuclv
źródło