Batasan Panjang Jalur Maksimum

Di Windows API (dengan beberapa pengecualian yang dibahas dalam paragraf berikut), panjang maksimum untuk jalur adalah MAX_PATH, yang didefinisikan sebagai 260 karakter. Jalur lokal disusun dalam urutan berikut: huruf kandar, titik dua, garis miring terbalik, komponen nama yang dipisahkan oleh garis miring terbalik, dan karakter null yang mengakhiri. Misalnya, jalur maksimum pada drive D adalah "D:\some 256-character path string<NUL>" di mana "<NUL>" mewakili karakter null penghentian yang tidak terlihat untuk halaman kode sistem saat ini. (Karakter <> digunakan di sini untuk kejelasan visual dan tidak dapat menjadi bagian dari string jalur yang valid.)

Misalnya, Anda dapat mencapai batasan ini jika Anda mengkloning repositori git yang memiliki nama file panjang ke dalam folder yang memiliki nama panjang.

Catatan

Fungsi I/O file di Windows API mengonversi "/" menjadi "\" sebagai bagian dari mengonversi nama menjadi nama gaya NT, kecuali saat menggunakan awalan "\\?\" sebagaimana dirinci di bagian berikut.

Windows API memiliki banyak fungsi yang juga memiliki versi Unicode untuk mengizinkan jalur dengan panjang yang diperluas untuk total panjang jalur maksimum 32.767 karakter. Jenis jalur ini terdiri dari komponen yang dipisahkan oleh garis miring terbelakang, masing-masing hingga nilai yang dikembalikan dalam parameter lpMaximumComponentLength dari fungsi GetVolumeInformation (nilai ini biasanya 255 karakter). Untuk menentukan jalur dengan panjang yang diperluas, gunakan awalan "\\?\". Misalnya, "\\?\D:\very long path".

Catatan

Jalur maksimum 32.767 karakter adalah perkiraan, karena awalan "\\?\" dapat diperluas ke string yang lebih panjang oleh sistem pada waktu proses, dan ekspansi ini berlaku untuk panjang total.

Awalan "\\?\" juga dapat digunakan dengan jalur yang dibangun sesuai dengan konvensi penamaan universal (UNC). Untuk menentukan jalur seperti itu menggunakan UNC, gunakan awalan "\\?\UNC\". Misalnya, "\\?\UNC\server\share", di mana "server" adalah nama komputer dan "berbagi" adalah nama folder bersama. Awalan ini tidak digunakan sebagai bagian dari jalur itu sendiri. Mereka menunjukkan bahwa jalur harus diteruskan ke sistem dengan modifikasi minimal, yang berarti Anda tidak dapat menggunakan garis miring ke depan untuk mewakili pemisah jalur, atau titik untuk mewakili direktori saat ini, atau titik ganda untuk mewakili direktori induk. Karena Anda tidak dapat menggunakan awalan "\\?\" dengan jalur relatif, jalur relatif selalu dibatasi hingga total karakter MAX_PATH .

Tidak perlu melakukan normalisasi Unicode pada jalur dan string nama file untuk digunakan oleh fungsi API I/O file Windows karena sistem file memperlakukan jalur dan nama file sebagai urutan buram WCHARs. Normalisasi apa pun yang diperlukan aplikasi Anda harus dilakukan dengan ingat ini, di luar panggilan apa pun ke fungsi API I/O file Windows terkait.

Saat menggunakan API untuk membuat direktori, jalur yang ditentukan tidak boleh begitu lama sehingga Anda tidak dapat menambahkan nama file 8.3 (artinya, nama direktori tidak boleh melebihi MAX_PATH minus 12).

Shell dan sistem file memiliki persyaratan yang berbeda. Dimungkinkan untuk membuat jalur dengan Windows API yang tidak dapat ditafsirkan oleh antarmuka pengguna shell dengan benar.

Aktifkan Jalur Panjang di Windows 10, Versi 1607, dan Yang Lebih Baru

Mulai Windows 10, versi 1607, batasan MAX_PATH telah dihapus dari fungsi file dan direktori Win32 umum. Namun, Anda harus ikut serta dalam perilaku baru.

Untuk mengaktifkan perilaku jalur panjang baru, kedua kondisi berikut harus dipenuhi:

  • Kunci registri Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled (Type: REG_DWORD) harus ada dan diatur ke 1. Nilai kunci akan di-cache oleh sistem (per proses) setelah panggilan pertama ke file Win32 atau fungsi direktori yang terpengaruh (lihat di bawah ini untuk daftar fungsi). Kunci registri tidak akan dimuat ulang selama masa pakai proses. Agar semua aplikasi pada sistem mengenali nilai kunci, boot ulang mungkin diperlukan karena beberapa proses mungkin telah dimulai sebelum kunci diatur.

Anda juga dapat menyalin kode ini ke .reg file yang dapat mengatur ini untuk Anda, atau menggunakan perintah PowerShell dari jendela terminal dengan hak istimewa yang ditingkatkan:

Windows Registry Editor Version 5.00

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

Catatan

Kunci registri ini juga dapat dikontrol melalui Kebijakan Grup di Computer Configuration > Administrative Templates > System > Filesystem > Enable Win32 long paths.

  • Manifes aplikasi juga harus menyertakan longPathAware elemen .

    <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>
    

Ini adalah fungsi manajemen direktori yang tidak lagi memiliki batasan MAX_PATH jika Anda memilih untuk perilaku jalur panjang: CreateDirectoryW, CreateDirectoryExW GetCurrentDirectoryW RemoveDirectoryW SetCurrentDirectoryW.

Ini adalah fungsi manajemen file yang tidak lagi memiliki batasan MAX_PATH jika Anda memilih untuk perilaku jalur panjang: 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.