Jendela 256 karakter batasan nama jalur

17

setelah penelitian yang panjang, saya akhirnya menemukan bahwa nama path tidak boleh lebih dari 256 karakter bahkan di Microsoft Windows 7. Saya benar-benar tidak mengerti mengapa ada batasan yang bodoh, karena NTFS dapat menangani hingga ~ 32.000 karakter path panjang tanpa masalah sejak lebih dari selusin tahun! Apakah tidak ada kemungkinan untuk mengubahnya? Atau adakah solusi praktis untuk menghindarinya?

260 karakter hanya sedikit untuk kasus penggunaan sederhana seperti beberapa direktori foto bersarang dengan nama file yang panjang.

HopelessN00b
sumber
1
Saya pikir kekhawatirannya adalah bahwa ada program yang lebih lama yang memiliki ide hardcoded tentang berapa lama jalan seharusnya, sehingga jika Anda mencoba menggunakannya di jalur yang lebih panjang, mereka akan meledak dengan cara yang menarik.
dsolimano
Apakah OS Linux punya masalah ini?
Ahorn

Jawaban:

18

Menurut Microsoft:

  • Windows API tradisional membatasi nama jalur hingga 260 karakter, bahkan untuk aplikasi yang dikembangkan untuk versi terbaru.

  • Aplikasi yang menggunakan Unicode-aware API dapat menggunakan bentuk jalur yang memungkinkan hingga 32767 karakter. Nama file harus diawali dengan \\?\, dan harus path absolut, misalnya, \\?\c:\dir\fileatau \\?\UNC\server\share\file. Ada batasan lebih lanjut, lihat referensi untuk detailnya.

Jika Anda berhasil membuat dan menggunakan hierarki file yang dalam dan perlu bekerja dengan aplikasi yang gagal karena panjangnya nama file, ada beberapa hal yang bisa Anda coba:

  • Gunakan mklinkperintah untuk membuat tautan simbolik , dan berikan jalur yang menggunakannya ke aplikasi Anda.

  • Gunakan substperintah untuk menetapkan huruf drive ke direktori.

  • Mulai aplikasi Anda dari direktori yang dalam dan berikan jalur relatif pendek.

  • Ganti beberapa nama panjang dengan nama alias 8,3 mereka ( micros~1), dengan asumsi yang masih ada di Windows 7. Jika Anda memiliki micros~1bersama micros~2, saya tidak tahu bagaimana cara mengatakan yang mana; mungkin menjalankan DOS command.com(sekali lagi, dengan asumsi Windows 7 masih bisa melakukannya).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
3
Yah, bahkan Windows Explorer dari Win7 tampaknya menggunakan API tradisional! Sayang sekali.
3
Bahkan lebih banyak backslash `\\? \` :-)
Ring Ø
@Gilles, Apakah micros ~ 1 dan micros ~ 2 standar di seluruh sistem atau itu acak?
Pacerier
@Pacerier Direktori mana pun yang pertama kali dibuat micros~1, jadi ini pada dasarnya acak.
Gilles 'SO- stop being evil'
0

Anda bisa menggunakan nama pendek (8,3) untuk semua folder dan file Anda.

Anda perlu memastikan bahwa itu diaktifkan.

Nama file yang panjang dianggap sebagai nama file apa pun yang melebihi konvensi penamaan gaya MS-DOS pendek (juga disebut 8.3). Biasanya, Windows menyimpan nama file yang panjang pada disk sebagai entri direktori khusus, yang dapat dinonaktifkan di seluruh sistem karena alasan kinerja tergantung pada sistem file tertentu. Saat Anda membuat nama file yang panjang, Windows juga dapat membuat bentuk nama pendek 8.3, yang disebut alias 8.3, dan menyimpannya di disk juga. Aliasing 8.3 ini dapat dinonaktifkan untuk volume yang ditentukan.

(berani saya)

Anda juga harus menulis beberapa kode untuk mendapatkan nama pendek dari nama panjang.

Sumber

ChrisF
sumber
2
lol ... Saya ingat hari ini di Windows 95 ketika kita semua mendapatkan FAT32 super duper ini dengan 256 nama file yang panjang! Itu fantastis (pada hari ini) dan saya sangat terkejut bahwa keterbatasan nama file masih bisa menjadi masalah di hari - hari ini . 2010! Windows benar-benar kuno ...
0

Nama file / direktori di NTFS terbatas pada 255 unicode codepoints, karena panjangnya disimpan sebagai byte. Tetapi tidak ada batas inheren dari total panjang jalur.

Banyak panggilan Win32 API (termasuk explorer shell) panggilan memang memiliki batas 260 - 1 panjang. Beberapa panggilan lain memiliki kemampuan untuk menggunakan awalan \\? \ Untuk mendapatkan hingga 32K (sedikit lebih sedikit, karena nama volume akan diganti di Kernel-land)

Dominik Weber
sumber