Sdílet prostřednictvím


Omezení maximální délky cesty

V rozhraní API systému Windows (s některými výjimkami probíranými v následujících odstavcích) je maximální délka cesty MAX_PATH, která je definována jako 260 znaků. Místní cesta je strukturovaná v následujícím pořadí: písmeno jednotky, dvojtečka, zpětné lomítko, komponenty názvů oddělené zpětnými lomítky a ukončující znak null. Například maximální cesta na jednotce D je "D:\nějaký řetězec cesty 256 znaků<NUL>" where "<NUL>" představuje neviditelný ukončovací znak null pro aktuální systém kódovou stránku. (Znaky <> jsou zde použity pro vizuální srozumitelnost a nemohou být součástí platného řetězce cesty.)

Toto omezení můžete například naklonovat, pokud klonujete úložiště Git s dlouhými názvy souborů do složky, která má dlouhý název.

Poznámka

Vstupně-výstupní funkce souboru v rozhraní API systému Windows převedou "/" na "\" jako součást převodu názvu na název ve stylu NT, s výjimkou použití předpony \\?\, jak je popsáno v následujících částech.

Rozhraní API systému Windows má mnoho funkcí, které mají také verze Unicode, které umožňují delší cestu pro maximální celkovou délku cesty 32 767 znaků. Tento typ cesty se skládá z komponent oddělených zpětnými lomítky, každý až do hodnoty vrácené v lpMaximumComponentLength parametr GetVolumeInformation funkce (tato hodnota je obvykle 255 znaků). Chcete-li zadat cestu s delší délkou, použijte předponu \\?\. Například "\\?\D:\velmi dlouhá cesta".

Poznámka

Maximální cesta 32 767 znaků je přibližná, protože předpona \\?\ může být rozšířena na delší řetězec systémem za běhu a toto rozšíření platí pro celkovou délku.

Předponu \\?\ lze také použít s cestami vytvořenými podle univerzální konvence pojmenování (UNC). Chcete-li zadat takovou cestu pomocí UNC, použijte předponu \\?\UNC\. Například \\?\UNC\server\share, kde "server" je název počítače a "sdílená složka" je název sdílené složky. Tyto předpony se nepoužívají jako součást samotné cesty. Označují, že cesta by měla být předána systému s minimálními úpravami, což znamená, že nelze použít lomítka k reprezentaci oddělovačů cest, nebo tečku představující aktuální adresář nebo dvojité tečky představující nadřazený adresář. Protože nemůžete použít předponu \\?\ s relativní cestou, relativní cesty jsou vždy omezeny na celkový počet MAX_PATH znaků.

U řetězců s cestami a názvy souborů pro použití funkcemi rozhraní API pro vstupně-výstupní operace souborů systému Windows není nutné provádět žádnou normalizaci Unicode, protože systém souborů zpracovává cestu a názvy souborů jako neprůznačnou sekvenci WCHARs. Jakákoli normalizace, kterou vaše aplikace vyžaduje, by měla být provedena s ohledem na to, externí volání souvisejících funkcí rozhraní API pro vstupně-výstupní operace systému Windows.

Při použití rozhraní API k vytvoření adresáře nemůže být zadaná cesta tak dlouhá, že nemůžete připojit název souboru 8.3 (to znamená, že název adresáře nesmí překročit MAX_PATH minus 12).

Prostředí a systém souborů mají různé požadavky. Pomocí rozhraní API systému Windows je možné vytvořit cestu, kterou uživatelské rozhraní prostředí nedokáže správně interpretovat.

Povolení dlouhých cest ve Windows 10 verze 1607 a novějších

Počínaje Windows 10 verze 1607 se MAX_PATH omezení odebrala z mnoha běžných funkcí souborů a adresářů Win32. Vaše aplikace se ale musí přihlásit k novému chování.

Pokud chcete povolit nové chování dlouhé cesty pro aplikaci, musí být splněny dvě podmínky. Musí být nastavena hodnota registru a manifest aplikace musí obsahovat longPathAware element.

Nastavení registru pro povolení dlouhých cest

Důležitý

Uvědomte si, že povolení tohoto nastavení registru ovlivní jenom aplikace, které byly upraveny tak, aby využívaly novou funkci. Vývojáři musí deklarovat, že jejich aplikace mají dlouhou cestu, jak je uvedeno v nastavení manifestu aplikace níže. Nejedná se o změnu, která ovlivní všechny aplikace.

Hodnota registru HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD) musí existovat a musí být nastavena na 1. Hodnota registru se uloží do mezipaměti systémem (podle procesu) po prvním volání ovlivněné funkce souboru nebo adresáře Win32 (viz níže uvedený seznam funkcí). Hodnota registru se během životnosti procesu znovu nenačte. Aby všechny aplikace v systému mohly rozpoznat hodnotu, může být vyžadováno restartování, protože některé procesy mohly být spuštěny před nastavením klíče.

Tento kód můžete také zkopírovat do souboru .reg, který můžete nastavit za vás, nebo můžete použít příkaz PowerShellu z okna terminálu se zvýšenými oprávněními:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"LongPathsEnabled"=dword:00000001

Poznámka

Toto nastavení registru lze také řídit pomocí zásad skupiny na Computer Configuration > Administrative Templates > System > Filesystem > Enable Win32 long paths. Zásady je možné použít také v Microsoft Intune pomocí poskytovateleCSP (Policy Configuration Service Provider).

Aktualizace manifestu aplikace pro deklarování možnosti dlouhé cesty

Manifest aplikace musí obsahovat také prvek longPathAware.

<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
        <ws2:longPathAware>true</ws2:longPathAware>
    </windowsSettings>
</application>

Funkce bez omezení MAX_PATH

Jedná se o funkce pro správu adresářů, které už nemají MAX_PATH omezení, pokud se přihlásíte k dlouhému chování cesty: CreateDirectoryW, CreateDirectoryExW GetCurrentDirectoryW RemoveDirectoryW SetCurrentDirectoryW.

Toto jsou funkce správy souborů, které už nemají MAX_PATH omezení, pokud se přihlásíte k dlouhému chování cesty: CopyFileW, CopyFile2, CopyFileExW, CreateFileW, CreateFile2, CreateHardLinkW, CreateSymbolicLinkW, DeleteFileW, FindFirstFileW, FindFirstFileExW, FindNextFileW, GetFileAttributesW, GetFileAttributesExW, SetFileAttributesW, GetFullPathNameW, GetLongPathNameW, MoveFileW, MoveFileExW, MoveFileWithProgressW, ReplaceFileW, SearchPathW, FindFirstFileNameW, FindNextFileNameW, FindFirstStreamW, FindNextStreamW, GetCompressedFileSizeW, GetFinalPathNameByHandleW.

Viz také

funkce správy souborů

funkcí pro správu adresářů

GetVolumeInformation