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?
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?
Jawaban:
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_PATH
nilai (259 karakter untuk file, 248 untuk folder). Lihathttp://msdn.microsoft.com/en-us/library/aa365247.aspx untuk detail lengkap.
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.
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.
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.
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?
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.
\\?\
awalan yang diperlukan pada waktu berjalan hingga beberapa panjang yang tidak ditentukan. Path harus tetap di bawah 32767 byte setelah ekspansi ini.
Panjang dalam NTFS adalah 255. NameLength
Bidang dalam $Filename
atribut 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).
255 karakter.
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.
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
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.
WCHAR
elemen. Tidak, ini bukan "Karakter Unicode" (periksa terminologi Unicode Anda: titik kode, karakter dll ...!).
255 karakter, meskipun jalur lengkap tidak boleh lebih lama dari itu juga. Ada tabel yang bagus di Wikipedia tentang ini: http://en.wikipedia.org/wiki/Filename .
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
w
). Jadi bagaimana sekarang?
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!
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.
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.