Sementara NTFS memungkinkan lintasan sekitar 32.000 karakter, Anda telah menemukan batasan panjang lintasan 259 karakter Win32 API .
Di Windows API (dengan beberapa pengecualian yang dibahas dalam [dokumen tertaut]), panjang maksimum untuk jalur adalah MAX_PATH
, yang didefinisikan sebagai 260 karakter.
(Ada juga NULL
karakter terminasi ditambahkan ke jalan, memberi kita 259 karakter yang dapat digunakan.)
Karena Explorer (dan hampir semua aplikasi Windows lainnya) bergantung pada Win32 API untuk akses sistem file, tidak praktis untuk mengatasi batasan ini walaupun mungkin :
Windows API memiliki banyak fungsi yang juga memiliki versi Unicode untuk mengizinkan jalur panjang-panjang untuk panjang jalur total maksimum 32.767 karakter. Tipe jalur ini terdiri dari komponen yang dipisahkan oleh garis miring terbalik, masing-masing hingga nilai yang dikembalikan dalam lpMaximumComponentLength
parameter GetVolumeInformation
fungsi (nilai ini biasanya 255 karakter). Untuk menentukan jalur panjang yang diperluas, gunakan awalan "\\? \". Misalnya, "\\? \ D: \ jalan yang sangat panjang ".
Sayangnya, Anda tidak bisa mengetik begitu saja \\?\D:\very long path
ke jendela Explorer. Aplikasi harus dirancang untuk memanfaatkan API ini dan menangani nama jalur yang sangat panjang.
Salah satu cara untuk mengakses jalur yang diperluas pada Windows adalah dengan menginstal Cygwin , lapisan emulasi * nix untuk Windows. Dalam pengujian saya, Cygwin tampaknya tidak dibatasi oleh MAX_PATH
; bash dan vi tidak memiliki masalah dengan jalur sepanjang 2.000 karakter.
Ingatlah bahwa meskipun Anda dapat menggunakan bash untuk menelusuri jalur panjang, Anda mungkin tidak akan dapat membuka file di jalur tersebut di aplikasi Windows biasa. Misalnya, mengetik notepad
sementara direktori kerja adalah jalur yang panjangnya membuat Anda
Kesalahan: Direktori kerja saat ini memiliki jalur yang lebih panjang dari yang diizinkan untuk direktori kerja Win32. Tidak dapat memulai aplikasi Windows asli dari sini.
Dan berusaha notepad "\\?\D:\very long path\file.txt"
juga tidak berhasil; itu diluncurkan, tetapi hanya mengatakan "Tidak dapat menemukan file ..." Mencoba hal yang sama dengan Notepad ++ crash. (Mungkin buffer overflow.)
Pilihan Anda yang lain untuk mengakses file tertentu yang terkubur jauh di dalam jalur panjang-diperpanjang adalah untuk mempersingkat jalur itu sendiri dengan membuat titik persimpangan NTFS . Dari prompt perintah yang ditinggikan:
D:\> mklink /J jct "\\?\D:\very\long\path"
Anda sekarang dapat mengakses konten D:\very\long\path\
dari D:\jct\
. Anda tidak akan menemukan masalah panjang jalur karena sejauh menyangkut Explorer dan aplikasi lain, jalurnya adil D:\jct\
(atau apa pun). Pengandar NTFS menangani pengalihan jalur ("titik berulang") secara transparan.
Kelemahan dari pendekatan ini jelas bahwa Anda harus membuat persimpangan di dekat file yang ingin Anda akses; Anda masih tidak bisa begitu saja menelusuri seluruh struktur direktori.
Mengenai karakter khusus ( " * : < > ? \ |
), itu tidak perlu dilakukan. Karakter-karakter tersebut memiliki makna khusus di dalam Windows, jadi tidak mungkin menggunakannya dalam jalur. (Cygwin memungkinkan Anda membuat file dengan karakter khusus, tetapi ia melakukannya dengan mengganti karakter dengan karakter Unicode khusus, yang kemudian diganti kembali ketika membaca. Melihat file yang dibuat Cygwin ini di Linux atau di Explorer tidak akan terlihat benar, karena karakter Unicode tidak akan diganti kembali.)
Semua itu berkata, apa yang Anda lakukan yang membutuhkan jalan yang sangat panjang? Mungkin Anda bisa membuat hidup Anda lebih mudah dengan mengevaluasi kembali apa yang Anda lakukan dan menghindari jalan panjang. Kemungkinannya adalah, Anda tidak perlu jalur selama itu .