Bagikan melalui


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 drive, 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 tidak terlihat untuk codepage 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 "\\?\" seperti yang dirinci di bagian berikut.

Windows API memiliki banyak fungsi yang juga memiliki versi Unicode untuk mengizinkan jalur panjang yang diperluas untuk panjang jalur total 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 tersebut 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 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 I/O API file Windows karena sistem file memperlakukan jalur dan nama file sebagai urutan buram WCHAR s. Normalisasi apa pun yang diperlukan aplikasi Anda harus dilakukan dengan mengingat hal 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 (yaitu, nama direktori tidak boleh melebihi MAX_PATH minus 12).

Shell dan sistem file memiliki persyaratan yang berbeda. Dimungkinkan untuk membuat jalur dengan WINDOWS API bahwa antarmuka pengguna shell tidak dapat menafsirkan dengan benar.

Mengaktifkan jalur panjang di Windows 10, versi 1607, dan yang lebih baru

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

Untuk mengaktifkan perilaku jalur panjang baru per aplikasi, dua kondisi harus dipenuhi. Nilai registri harus diatur, dan manifes aplikasi harus menyertakan longPathAware elemen .

Pengaturan registri untuk mengaktifkan jalur panjang

Penting

Pahami bahwa mengaktifkan pengaturan registri ini hanya akan memengaruhi aplikasi yang telah dimodifikasi untuk memanfaatkan fitur baru. Pengembang harus menyatakan aplikasi mereka untuk mengetahui jalur panjang, seperti yang diuraikan dalam pengaturan manifes aplikasi di bawah ini. Ini bukan perubahan yang akan memengaruhi semua aplikasi.

Nilai registri HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD) harus ada dan diatur ke 1. Nilai registri 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). Nilai registri tidak akan dimuat ulang selama masa pakai proses. Agar semua aplikasi pada sistem mengenali nilai, 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

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

Pembaruan manifes aplikasi untuk mendeklarasikan kemampuan jalur panjang

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>

Fungsi tanpa batasan MAX_PATH

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.

Lihat juga

Fungsi Manajemen File

Fungsi Manajemen Direktori

GetVolumeInformation