ฉันกำลังออกแบบตารางฐานข้อมูลซึ่งจะเก็บชื่อไฟล์ของไฟล์ที่อัปโหลด ความยาวสูงสุดของชื่อไฟล์ใน NTFS ที่ใช้โดย Windows XP หรือ Vista คือเท่าใด
ฉันกำลังออกแบบตารางฐานข้อมูลซึ่งจะเก็บชื่อไฟล์ของไฟล์ที่อัปโหลด ความยาวสูงสุดของชื่อไฟล์ใน NTFS ที่ใช้โดย Windows XP หรือ Vista คือเท่าใด
คำตอบ:
ส่วนประกอบแต่ละส่วนของชื่อไฟล์ (เช่นแต่ละไดเรกทอรีย่อยตามเส้นทางและชื่อไฟล์สุดท้าย) ถูก จำกัด ที่ 255 อักขระและความยาวพา ธ ทั้งหมดจะถูก จำกัด ที่ประมาณ 32,000 ตัวอักษร
อย่างไรก็ตามใน Windows คุณต้องมีMAX_PATH
ค่าไม่เกิน(259 ตัวอักษรสำหรับไฟล์, 248 สำหรับโฟลเดอร์) ดูhttp://msdn.microsoft.com/en-us/library/aa365247.aspxสำหรับรายละเอียดทั้งหมด
มันคือ 257 ตัวอักษร ความแม่นยำ: NTFS นั้นกำหนดความยาวชื่อไฟล์สูงสุดหลายพันตัวอักษร (ประมาณ 30'000 อย่าง) อย่างไรก็ตาม Windows จะกำหนดความยาวสูงสุด 260 ชื่อสำหรับเส้นทาง + ชื่อไฟล์ โฟลเดอร์ drive + มีความยาวอย่างน้อย 3 ตัวอักษรดังนั้นคุณจึงมี 257
นี่คือสิ่งที่ "Unhandled exception" พูดในกรอบ 4.5 เมื่อพยายามบันทึกไฟล์ด้วยชื่อไฟล์แบบยาว:
พา ธ ชื่อไฟล์หรือทั้งสองที่ระบุยาวเกินไป ชื่อไฟล์แบบเต็มต้องน้อยกว่า260อักขระและชื่อไดเรกทอรีต้องน้อยกว่า248ตัวอักษร
199 บน Windows XP NTFS ฉันเพิ่งตรวจสอบ
นี่ไม่ใช่ทฤษฎี แต่จากการลองบนแล็ปท็อปของฉัน อาจมีผลกระทบบรรเทา แต่มันจะไม่ทำให้ฉันใหญ่ขึ้น
มีการตั้งค่าอื่น ๆ ที่ จำกัด สิ่งนี้ฉันสงสัย? ลองด้วยตัวคุณเอง
w
ลบออกและสร้างโฟลเดอร์ที่มีชื่อเดียวกันใน Windows 7 x64 ตอนนี้คำถามคืออะไรคือปัจจัย จำกัด ที่นี่: รุ่น NTFS, ระบบปฏิบัติการหรือระบบย่อยหรือ Win32 API ใน XP?
ตามMSDNมี 260 ตัวอักษร มันรวมถึง"<NUL>"
- ตัวอักษรยกเลิกสิ้นสุดที่มองไม่เห็นดังนั้นความยาวจริงคือ 259
แต่อ่านบทความมันซับซ้อนกว่าเล็กน้อย
\\?\
นำหน้าที่ต้องการภายในระยะเวลาที่กำหนดให้เป็นความยาวที่ไม่ระบุ พา ธ ต้องอยู่ภายใต้ 32767 ไบต์หลังจากส่วนขยายนี้
ความยาวใน NTFS คือ 255 NameLength
ฟิลด์ใน NTFS$Filename
แอตทริบิวต์เป็นไบต์ที่ไม่มีการชดเชย ค่านี้ให้ช่วงของ 0-255
ชื่อไฟล์ iself สามารถอยู่ใน "namespaces" ที่แตกต่างกัน จนถึงตอนนี้มี: POSIX, WIN32, DOS และ (WIN32DOS - เมื่อชื่อไฟล์สามารถเป็นชื่อ DOS ได้) (เนื่องจากสตริงมีความยาวจึงอาจมี \ 0 แต่จะทำให้เกิดปัญหาและไม่ได้อยู่ในเนมสเปซข้างต้น)
ดังนั้นชื่อของไฟล์หรือไดเรกทอรีสามารถยาวได้ถึง 255 ตัวอักษร เมื่อระบุเส้นทางแบบเต็มภายใต้ Windows คุณจะต้องใส่คำนำหน้าเส้นทางด้วย\\? \ (หรือใช้ \\? \ UNC \ server \ share สำหรับเส้นทาง UNC)เพื่อทำเครื่องหมายเส้นทางนี้เป็นความยาวเสริม (~ 32k ตัวอักษร) . หากเส้นทางของคุณยาวขึ้นคุณจะต้องตั้งไดเรกทอรีทำงานของคุณไปพร้อมกัน (เอฟเฟกต์ข้างเคียงเนื่องจากการตั้งค่าทั้งกระบวนการ)
255 ตัวอักษร
ฉันกำลังเพิ่มสิ่งนี้ลงในคำตอบที่ได้รับการอนุมัติข้างต้น
เหตุผลที่คนเชื่อว่ามีความยาว 255-260 ตัวอักษรเป็นเพราะนั่นคือทั้งหมดที่ Windows Explorer รองรับ มันจะเกิดข้อผิดพลาดในการทำบางสิ่งเช่นสำเนาไฟล์ในชื่อไฟล์ที่ยาวกว่านั้น อย่างไรก็ตามโปรแกรมสามารถอ่านและเขียนชื่อไฟล์ได้นานขึ้น (ซึ่งเป็นวิธีที่คุณได้รับความยาวที่ Explorer บ่นในตอนแรก) Microsoft "แนะนำแก้ไข" ในสถานการณ์เช่นนี้คือการเปิดไฟล์ในโปรแกรมต้นฉบับที่เขียนและเปลี่ยนชื่อ
ตามเอกสารของ Windows SDK ใหม่ (8.0) ดูเหมือนว่าจะมีการ จำกัด เส้นทางใหม่ มีชุดการจัดการเส้นทางใหม่และนิยามของ PATHCCH_MAX_CCH ดังนี้:
// max # of characters we support using the "\\?\" syntax
// (0x7FFF + 1 for NULL terminator)
#define PATHCCH_MAX_CCH 0x8000
ส่วนนี้ของเอกสารอย่างเป็นทางการกล่าวอย่างชัดเจนว่าเป็น255 Unicode อักขระสำหรับ NTFS, exFAT และ FAT32 และ 127 Unicode หรือ 254 ASCII อักขระสำหรับ UDF
นอกจากนั้นความยาวชื่อพา ธ สูงสุดคือ 32,760 อักขระ Unicode เสมอโดยแต่ละองค์ประกอบของพา ธ ไม่เกิน 255 อักขระ
WCHAR
องค์ประกอบ32767 ไม่ไม่ใช่ "ตัวอักษร Unicode" (ตรวจสอบคำศัพท์ Unicode ของคุณ: จุดรหัสตัวอักษร ฯลฯ ... !)
238! ฉันตรวจสอบภายใต้ Win7 32 บิตด้วยสคริปต์ค้างคาวต่อไปนี้:
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
) แล้วตอนนี้ล่ะ?
จริงๆแล้วมันเป็น 256 เห็นFile System ฟังก์ชั่นการเปรียบเทียบขีด จำกัด
หากต้องการโพสต์ซ้ำบนhttp://fixunix.com/microsoft-windows/30758-windows-xp-file-name-length-limit.html
"สมมติว่าเรากำลังพูดถึง NTFS และไม่ใช่ FAT32," 255 ตัวอักษรสำหรับพา ธ + ไฟล์ "เป็นข้อ จำกัด ของ Explorer ไม่ใช่ระบบไฟล์ตัวเอง NTFS รองรับพา ธ สูงสุด 32,000 ตัวอักษร Unicode โดยแต่ละคอมโพเนนต์มีความยาว 255 อักขระ
Explorer - และ Windows API- จำกัด คุณไว้ที่ 260 ตัวอักษรสำหรับพา ธ ซึ่งรวมถึงตัวอักษรชื่อไดรฟ์เครื่องหมายโคลอนการแยกเครื่องหมายทับและอักขระ null ที่สิ้นสุด เป็นไปได้ที่จะอ่านเส้นทางที่ยาวขึ้นใน Windows หากคุณเริ่มต้นด้วย
\\
"
หากคุณอ่านข้อความข้างต้นคุณจะเห็นว่ามีสิ่งที่ 5 ที่คุณมั่นใจได้: ค้นหาผู้ใช้คอมพิวเตอร์อย่างน้อยหนึ่งคนที่ดื้อรั้น!
ฉันไม่สามารถสร้างไฟล์ที่มีชื่อ + period + extnesion ใน WS 2012 Explorer นานกว่า224อักขระ อย่ายิงผู้ส่งสาร!
ใน CMD ของเซิร์ฟเวอร์เดียวกันฉันไม่สามารถสร้างชื่ออักขระยาวกว่า235ตัว:
ระบบไม่สามารถหาเส้นทางที่ระบุ.
ไฟล์ที่มีชื่อตัวละคร 224 ตัวที่สร้างขึ้นใน Explorer ไม่สามารถเปิดได้ใน Notepad ++ มันเพิ่งมาพร้อมกับไฟล์ใหม่แทน
The system cannot find the path specified.
The specified path, file name, or both are too long.
ไม่ได้เป็นเช่นเดียวกับ ฉันเดาว่าคุณพิมพ์ผิดหรือบางอย่าง คุณได้รับข้อความนั้นหากคุณพยายามสร้างไฟล์ในเส้นทางที่ไม่มีอยู่หรือถ้าคุณต้องการย้ายไปยังทิศทางที่ไม่มีอยู่