Panjang nama file maksimum di NTFS (Windows XP dan Windows Vista)?

261

Saya sedang merancang tabel database yang akan menyimpan nama file file yang diunggah. Berapa panjang maksimum nama file di NTFS seperti yang digunakan oleh Windows XP atau Vista?

GateKiller
sumber
83
Saya belum pernah melihat begitu banyak jawaban berbeda untuk apa yang seharusnya menjadi pertanyaan sederhana. 199, 255, 256, 257, 260, 'sekitar 30.000', 'sekitar 32.000', dan 'itu tergantung'. Tentu, ada kualifikasi, tetapi ini semua tidak benar kan?
MickeyfAgain_BeforeExitOfSO
7
255, saya tahu ini karena saya harus membangun aplikasi untuk mencegah pengguna korporat mencapai ini, karena menyebabkan masalah pada server penyimpanan kami.
RobertPitt
2
@RobertPitt. Anda melewatkan sesuatu di sana. Kutipan dari MSDN: "panjang maksimum untuk jalur adalah MAX_PATH, yang didefinisikan sebagai 260 karakter"
Michael Olesen
7
@ Michael9000. Saya percaya RobertPitt mengutip batas nama file (yang merupakan pertanyaan tentang ini), bukan batas jalur.
gdw2
7
NTFS TIDAK terbatas pada MAX_PATH sama sekali, Windows Shell terbatas pada MAX_PATH, panjang jalur maksimum NTFS adalah 32k
paulm

Jawaban:

286

Komponen individual dari nama file (yaitu setiap subdirektori di sepanjang jalur, dan nama file akhir) dibatasi hingga 255 karakter, dan total panjang jalur dibatasi hingga sekitar 32.000 karakter.

Namun, pada Windows, Anda tidak dapat melebihi MAX_PATHnilai (259 karakter untuk file, 248 untuk folder). Lihathttp://msdn.microsoft.com/en-us/library/aa365247.aspx untuk detail lengkap.

Adam Rosenfield
sumber
4
Berikut adalah beberapa fakta yang menegaskan jawaban ini (Windows biasanya dibatasi hingga 260 karakter): msdn.microsoft.com/en-us/library/… dan blogs.msdn.com/b/bclteam/archive/2007/02/13 / ...
Michael Olesen
62
Benar untuk NTFS, tidak benar untuk Windows, sesuai dengan tautan yang Anda berikan: "Di Windows API (dengan beberapa pengecualian dibahas dalam paragraf berikut), panjang maksimum untuk jalur adalah MAX_PATH, yang didefinisikan sebagai 260 karakter". The Total path, untuk semua tujuan praktis, terbatas pada 259 karakter (yang memungkinkan untuk null-terminator).
Lawrence Dol
9
Rupanya jika Anda menggunakan "versi unicode" metode file Windows API, Anda bisa mendapatkan hingga 32767 jika Anda awalan nama path dengan "\\? \" Apakah itu benar?
rogerdpack
6
@rogerdpack: untuk path lengkap, ya, tetapi masing-masing komponen individu (subfolder / final-file) memiliki batas 255 utf-16 kode poin. Plus, perangkat lunak normal mengharapkan MAX_PATH, jadi ... boom :)
snemarch
5
Di Windows 10 (Versi 1607 - Pembaruan Ulang Tahun) dan Windows Server 2016 Anda harus memiliki opsi untuk mengabaikan masalah MAX_PATH dengan mengganti entri kebijakan grup memungkinkan jalur panjang NTFS di bawah Konfigurasi Komputer -> Template Admin -> Sistem -> Sistem File:
Steven Mark Ford
28

Ini 257 karakter. Lebih tepatnya: NTFS sendiri memaksakan panjang nama file maksimum beberapa ribu karakter (sekitar 30'000 sesuatu). Namun, Windows menerapkan panjang maksimum 260 untuk Path + Nama file. Drive + folder membutuhkan setidaknya 3 karakter, jadi Anda berakhir dengan 257.

Alphager
sumber
21
Salah - terminator NUL adalah bagian dari MAX_PATH, yang memberi Anda jalur maks 256 karakter (yang tidak dapat Anda buat karena batas komponen individu 255).
snemarch
4
"yang tidak dapat Anda buat karena batas komponen individu 255" Salah. Kita berbicara di sini tentang panjang lintasan maks, bukan panjang komponen lintasan individu. Selain itu "Saat menggunakan API untuk membuat direktori, jalur yang ditentukan tidak boleh terlalu panjang sehingga Anda tidak dapat menambahkan nama file 8,3 (yaitu, nama direktori tidak boleh melebihi MAX_PATH minus 12)."
Ludovic Kuty
Debat ini hanya muncul karena api tingkat rendah memungkinkan pembuatan nama file 256 karakter, dengan asumsi bahwa 256 karakter adalah nol, tetapi file menjadi tidak dapat diakses (disembunyikan) ke aplikasi asli, jadi umumnya tidak berguna.
Conrad B
1
@LudovicKuty: sebenarnya OP sedang berbicara tentang batasan panjang nama file , bukan panjang path (ya, bahkan dalam revisi asli, saya memeriksa). Dan ia secara khusus mengacu pada batas NTFS dan bukan pada batas OS, subsistem atau API atau kerangka kerja tertentu.
0xC0000022L
@ 0xC0000022L Ya, tentu saja. Saya salah membaca di pertanyaan OP dan fokus pada komentar yang berbicara tentang panjang nama file dan panjang jalur.
Ludovic Kuty
27

Ini adalah apa yang dikatakan "Pengecualian Tidak Tertangani" pada framework 4.5 ketika mencoba menyimpan file dengan nama file yang panjang:

Jalur yang ditentukan, nama file, atau keduanya terlalu panjang. Nama file yang sepenuhnya memenuhi syarat harus kurang dari 260 karakter, dan nama direktori harus kurang dari 248 karakter.

tangkapan layar

SturmCoder
sumber
16

199 pada Windows XP NTFS, saya baru saja memeriksa.

Ini bukan teori tetapi dari hanya mencoba di laptop saya. Mungkin ada efek meringankan, tetapi secara fisik tidak akan membiarkan saya membuatnya lebih besar.

Apakah ada pengaturan lain yang membatasi ini, saya bertanya-tanya? Cobalah sendiri.

merpati
sumber
1
Mengonfirmasi ini pada versi XP saya, sungguh merepotkan
Julian Young
Saya melakukan hal yang sama persis pada Windows XP hanya untuk cekikikan. Saya mencapai batas 200 karakter. Kemudian saya baru saja membuat file dengan 255 kali w, menghapusnya dan membuat folder dengan nama yang sama pada Windows 7 x64. Sekarang pertanyaannya adalah apa faktor pembatas di sini: versi NTFS, OS atau subsistem atau Win32 API di XP?
0xC0000022L
Batas 200 karakter tampaknya berada di penjelajah. Program lain dapat membuat nama file yang lebih panjang. Ini mungkin merupakan batas yang disengaja untuk menyelamatkan pengguna darinya. :-)
avl_sweden
13

Menurut MSDN , ini adalah 260 karakter. Ini termasuk- "<NUL>"null terminasi yang mengakhiri karakter, jadi panjang sebenarnya adalah 259.

Tapi baca artikelnya, ini sedikit lebih rumit.

Kibbee
sumber
1
Sebenarnya, artikel MSDN yang dirujuk mengatakan bahwa path dibatasi hingga 260 karakter tetapi panjang nama file tergantung pada filesystem (tetapi biasanya 255 byte). Namun, dimungkinkan untuk menggunakan "Versi Unicode [fungsi Windows API]" untuk menaikkan batas lintasan menjadi 32767 byte, tetapi batas tersebut dikurangi oleh windows yang secara internal memperluas \\?\ awalan yang diperlukan pada waktu berjalan hingga beberapa panjang yang tidak ditentukan. Path harus tetap di bawah 32767 byte setelah ekspansi ini.
Mikko Rantalainen
13

Panjang dalam NTFS adalah 255. NameLengthBidang dalam $Filenameatribut NTFS adalah byte tanpa offset; ini menghasilkan kisaran 0-255.

Nama file itu sendiri bisa dalam "ruang nama" yang berbeda. Sejauh ini ada: POSIX, WIN32, DOS dan (WIN32DOS - ketika nama file bisa menjadi nama asli DOS). (Karena string memiliki panjang, itu bisa berisi \ 0 tetapi itu akan menghasilkan masalah dan tidak ada dalam ruang nama di atas.)

Dengan demikian nama file atau direktori dapat mencapai 255 karakter. Saat menentukan lintasan lengkap di Windows, Anda perlu awalan lintasan dengan \\? \ (Atau gunakan \\? \ UNC \ server \ bagikan untuk lintasan UNC) untuk menandai lintasan ini sebagai jalur yang panjangnya diperluas (~ 32k karakter) . Jika jalur Anda lebih panjang, Anda harus mengatur direktori kerja Anda di sepanjang jalan (ugh - efek samping karena pengaturan proses-lebar).

Dominik Weber
sumber
4

Saya menambahkan ini ke jawaban yang disetujui di atas.

MENJADI CLEAR, alasan orang percaya itu adalah 255-260 karakter adalah karena itu semua yang didukung oleh Windows Explorer. Ini akan kesalahan melakukan sesuatu seperti menyalin file pada nama file lebih lama dari itu. Namun, sebuah program dapat membaca dan menulis nama file yang jauh lebih lama (yang merupakan cara Anda untuk panjang lebar yang mengeluh tentang Explorer di tempat pertama). "Perbaikan yang disarankan" Microsoft dalam situasi seperti ini adalah membuka file di program asli yang menulisnya dan menamainya kembali.

std''OrgnlDave
sumber
Saya mencoba untuk menyimpan file jauh di bawah hierarki folder pasti melebihi 260+ karakter dari baris perintah dengan vim tetapi tidak berhasil.
Panny
@panny: jadi penulis Vim belum berhati-hati untuk mengimplementasikan nama jalur panjang itu. Itu bukan Windows untuk disalahkan atau subsistem Win32 juga tidak ada hubungannya dengan batasan panjang nama file untuk NTFS OP bertanya tentang.
0xC0000022L
3

Menurut dokumentasi Windows SDK (8.0) yang baru, tampaknya disediakan batas jalur baru. Ada serangkaian fungsi penanganan jalur baru dan definisi PATHCCH_MAX_CCH seperti berikut:

// max # of characters we support using the "\\?\" syntax
// (0x7FFF + 1 for NULL terminator)
#define PATHCCH_MAX_CCH             0x8000
Cplusminus_is_coming
sumber
3
Namun Windows 8 explorer (Win8.1 Preview dalam kasus saya) tidak berfungsi dengan batas ini dan tidak akan menerima jalur yang lebih panjang dari 259 karakter.
Cplusminus_is_coming
3

Bagian dari dokumentasi resmi ini mengatakan dengan jelas bahwa itu adalah 255 karakter Unicode untuk NTFS, exFAT dan FAT32, dan 127 Unicode atau 254 karakter ASCII untuk UDF.

Selain itu, panjang nama jalur maksimum selalu 32.760 karakter Unicode, dengan setiap komponen jalur tidak lebih dari 255 karakter.

gak
sumber
Cukup dekat. Seperti yang saya tunjukkan dalam komentar pada jawaban yang diterima, itu adalah 32767 WCHARelemen. Tidak, ini bukan "Karakter Unicode" (periksa terminologi Unicode Anda: titik kode, karakter dll ...!).
0xC0000022L
-2

238! Saya memeriksanya di bawah Win7 32 bit dengan skrip kelelawar berikut:

set "fname="
for /l %%i in (1, 1, 27) do @call :setname
@echo %fname%
for /l %%i in (1, 1, 100) do @call :check
goto :EOF
:setname
set "fname=%fname%_123456789"
goto :EOF
:check
set "fname=%fname:~0,-1%"
@echo xx>%fname%
if not exist %fname% goto :eof
dir /b
pause
goto :EOF
SzB
sumber
Saya memeriksanya di Windows 7 dengan program yang menangani jalur panjang dengan benar. Setiap segmen jalur individual dapat memakan hingga 255 karakter (saya gunakan w). Jadi bagaimana sekarang?
0xC0000022L
-2

Sebenarnya ini adalah 256, lihat Perbandingan Fungsi Sistem File, Batas .

Untuk mengulangi posting di http://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html

"Dengan asumsi kita berbicara tentang NTFS dan bukan FAT32," 255 karakter untuk path + file "adalah batasan dari Explorer, bukan sistem file itu sendiri. NTFS mendukung jalur hingga 32.000 karakter Unicode panjang, dengan masing-masing komponen hingga 255 karakter.

Explorer -dan Windows API- membatasi Anda untuk 260 karakter untuk path, yang meliputi huruf drive, titik dua, memisahkan garis miring, dan mengakhiri karakter null. Dimungkinkan untuk membaca jalur yang lebih panjang di Windows jika Anda memulainya dengan \\"

Jika Anda membaca posting di atas, Anda akan melihat ada hal ke-5 yang dapat Anda yakini: Menemukan setidaknya satu pengguna komputer yang keras kepala!

fane
sumber
4
Tidak - itu adalah 255. Bidang NameLength dalam atribut NTFS $ Filename adalah byte tanpa offset; ini menghasilkan kisaran 0-255
Dominik Weber
-2

Saya tidak bisa membuat file dengan nama + periode + ekstensi di WS 2012 Explorer lebih dari 224 karakter. Jangan tembak utusan itu!

Dalam CMD dari server yang sama saya tidak dapat membuat nama karakter lebih dari 235 :

Sistem tidak mampu menemukan jalur yang ditentukan.

File dengan nama karakter 224 yang dibuat di Explorer tidak dapat dibuka di Notepad ++ - hanya muncul dengan file baru.

ajeh
sumber
The system cannot find the path specified.tidak sama dengan The specified path, file name, or both are too long.. Saya kira Anda memiliki kesalahan ketik atau sesuatu. Anda mendapatkan pesan itu jika Anda mencoba membuat file di jalur yang tidak ada atau jika Anda ingin pindah ke arah yang tidak ada.
Matthias Burger