po długich badaniach w końcu odkryłem, że nazwy ścieżek nie mogą być dłuższe niż 256 znaków, nawet w najnowszym systemie Microsoft Windows 7. Naprawdę nie rozumiem, dlaczego istnieją takie głupie ograniczenia, ponieważ NTFS może obsłużyć ścieżkę do ~ 32 000 znaków długość bez problemu od kilkunastu lat! Czy nie ma takiej możliwości? Czy są jakieś praktyczne rozwiązania, aby tego uniknąć?
260 znaków to bardzo niewiele, nawet w prostych przypadkach użycia, takich jak niektóre zagnieżdżone katalogi zdjęć z długimi nazwami plików.
Odpowiedzi:
Według Microsoft:
Tradycyjny interfejs API systemu Windows ogranicza nazwy ścieżek do 260 znaków, nawet w przypadku aplikacji opracowanych dla najnowszej wersji.
Aplikacje korzystające z interfejsu API obsługującego Unicode mogą używać formy ścieżki, która pozwala na maksymalnie 32767 znaków. Nazwa pliku musi być poprzedzona prefiksem
\\?\
i musi być ścieżką bezwzględną, np .\\?\c:\dir\file
Lub\\?\UNC\server\share\file
. Istnieją dalsze ograniczenia, szczegółowe informacje można znaleźć w odnośniku.Jeśli udało Ci się stworzyć i używać głębokiej hierarchii plików i musisz pracować z aplikacją, która bombarduje z powodu długości nazwy pliku, możesz spróbować kilku rzeczy:
Użyj
mklink
polecenia, aby utworzyć dowiązania symboliczne i przekaż ścieżkę, która ich używa, do aplikacji.Użyj
subst
polecenia, aby przypisać literę dysku do katalogu.Uruchom aplikację z głębokiego katalogu i przekaż mu krótkie ścieżki względne.
Zastąp niektóre długie nazwy ich aliasami 8.3 (
micros~1
), zakładając, że nadal istnieją one w systemie Windows 7. Jeśli maszmicros~1
obokmicros~2
, nie wiem, jak powiedzieć, który jest który; być może uruchom DOScommand.com
(ponownie, zakładając, że Windows 7 nadal może to zrobić).źródło
micros~1
, jest on zasadniczo losowy.Możesz użyć krótkich (8.3) nazw dla wszystkich swoich folderów i plików.
Musisz jednak upewnić się, że są one włączone.
(mój pogrubienie)
Musisz również napisać kod, aby uzyskać krótką nazwę z długiej nazwy.
Źródło
źródło
Nazwa pliku / katalogu w systemie plików NTFS jest ograniczona do 255 znaków kodowych Unicode, ponieważ długość jest przechowywana jako bajt. Ale nie ma nieodłącznego ograniczenia całkowitej długości ścieżki.
Wiele wywołań interfejsu API API (w tym powłoki eksploratora) ma limit długości 260–1. Niektóre inne wywołania mają możliwość użycia przedrostka \\? \, Aby uzyskać do 32 KB (nieco mniej, ponieważ nazwa woluminu zostaje podstawiona w Kernel-land)
źródło