Apa jalur file terpanjang yang dapat ditangani Windows?

57

Apa jalur file terpanjang yang dapat ditangani Windows?

Ron Tuffin
sumber

Jawaban:

48

Panjang Jalur Maksimum (dari MSDN)

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 yang dipisahkan oleh garis miring terbalik, dan karakter null terminating. Misalnya, jalur maksimum pada drive D adalah "D: \ <beberapa string jalur 256 karakter> <NUL>" di mana "<NUL>" mewakili karakter null penghentian yang tidak terlihat untuk codepage sistem saat ini. (Karakter <> digunakan di sini untuk kejelasan visual dan tidak dapat menjadi bagian dari string jalur yang valid.)

Adam Matan
sumber
4
Anda harus menyebutkan bahwa Anda dapat menangani jalur yang melebihi batas ini dengan mengawali dengan `\\?` (Saya pikir itu adalah urutan karakter itu).
Joey
3
Anda juga harus menyatakan batas unicode-paths yang disebutkan dalam paragraf ke-2: ~ 32k
akira
260? 256 karakter mengabaikan drive: \ dan terminator. Ini tahun 2009, mengapa kita hanya mendapatkan byte karakter untuk bermain-main?
Phoshi
@ Phoshi API untuk menggunakan jalur yang lebih panjang tidak digunakan oleh OS secara default, karena mengirimkan string panjang secara arbiter ke aplikasi yang ditulis dengan buruk oleh pengembang yang tahu jalur tidak akan pernah lebih dari 260 karakter dan memutuskan untuk mengalokasikan panjang yang tetap array untuk menahannya akan menghasilkan sejumlah besar buffer overflows yang menyebabkan aplikasi crash dan / atau dieksploitasi. Implementasi yang sedikit lebih baik oleh dev dengan pengetahuan yang sama akan dibatalkan karena validasi jalur mereka melaporkan kesalahan yang terlalu lama.
Dan Neely
15

Jalur file XP - 250 karakter

Jalur file Vista - 260 karakter

Jalur terpanjang pada instalasi Windows XP yang bersih adalah 152 karakter.

Jalur terpanjang pada instalasi Windows Vista semi-bersih adalah 195 karakter:

Windows XP memungkinkan nama file dengan panjang hingga 255 karakter

Windows Vista memungkinkan bahkan nama file yang lebih panjang berisi hingga 260 karakter.

http://www.codinghorror.com/blog/archives/000729.html

joe
sumber
5
ini benar jika Anda tidak menggunakan unicode-api, yang sedikit meluas batasnya (~ 32k, lihat msdn.microsoft.com/en-us/library/… )
akira
1
hmmm. pada tingkat itu, batas dalam Win7 seharusnya sekitar 265 karakter, bukan?
quack quixote
Mengapa mereka meningkatkan batas dengan sepuluh karakter? Tampaknya tidak sepadan, bukan: \
Phoshi
ini tidak benar. Panjang nama file maksimum masih 255 karakter di semua Windows, karena itulah batas NTFS
phuclv
8

Konstanta Windows MAX_PATHsama dengan 260 karena jawaban lain mengatakan, bagaimanapun, jalur terpanjang nyata adalah 32767.

Lihat di sini .

32k saat menggunakan UNICODE, tetapi sekarang kita harus menggunakannya, jadi kita juga harus menggunakan panjang jalur maks.

Juga, Anda dapat melihat jawaban saya di SO yang menjelaskan beberapa hal lebih rinci tentang panjang jalur maksimum.

ST3
sumber
1

Batas "klasik" adalah 260 karakter: drive letter+ :\+ 255 characters of filename+ \(atau untuk pembulatan) + null terminatorseperti yang dikatakan dalam jawaban lain

Namun batas internal sebenarnya adalah 32767 karakter yang dapat dicapai dengan menambahkan \\?\untuk mendapatkan jalur yang sepenuhnya memenuhi syarat

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 lpMaximumComponentLengthparameter GetVolumeInformationfungsi (nilai ini biasanya 255 karakter). Untuk menentukan jalur panjang yang diperluas, gunakan "\\?\"awalan. Sebagai contoh "\\?\D:\very long path",.

Jika karena beberapa alasan jalur yang sepenuhnya memenuhi syarat tidak dapat digunakan maka direktori yang lebih dalam dapat diakses dengan me-mount ke huruf drive dengan subst/ diskpartatau dengan membuat persimpangan / symlink untuk mempersingkat jalur

Sejak Windows 10 MAX_PATHbatasnya juga telah dihapus meskipun tidak secara default

Mulai di Windows 10, versi 1607, MAX_PATHbatasan telah dihapus dari fungsi Win32 file dan direktori umum. Namun, Anda harus ikut serta ke perilaku baru.

https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file

phuclv
sumber