ข้อ จำกัด ชื่อพา ธ ของหน้าต่างอักขระ 256 ตัว


17

หลังจากการค้นคว้ามานานฉันก็พบว่าชื่อพา ธ ไม่สามารถยาวเกิน 256 ตัวอักษรได้แม้ใน Microsoft Windows 7 ล่าสุดฉันไม่เข้าใจเลยว่าทำไมถึงมีข้อ จำกัด ที่โง่เช่นนี้เนื่องจาก NTFS สามารถจัดการเส้นทางได้ถึง 32,000 ตัวอักษร ความยาวไม่มีปัญหาใด ๆ มานานกว่าสิบปี! ไม่มีความเป็นไปได้ที่จะเปลี่ยนแปลงสิ่งนั้นใช่ไหม หรือมีวิธีแก้ปัญหาในทางปฏิบัติเพื่อหลีกเลี่ยงปัญหานั้นหรือไม่?

260 ตัวอักษรมีน้อยมากสำหรับกรณีการใช้งานที่ง่ายเช่นไดเรกทอรีรูปภาพที่ซ้อนกันและชื่อไฟล์ยาว ๆ


1
ฉันคิดว่าสิ่งที่น่ากังวลคือมีโปรแกรมรุ่นเก่าที่มีความคิดแบบฮาร์ดโค้ดว่าควรใช้เส้นทางนานแค่ไหนดังนั้นถ้าคุณพยายามใช้มันบนเส้นทางที่ยาวกว่าพวกเขาจะระเบิดด้วยวิธีที่น่าสนใจ
dsolimano

Linux OS มีปัญหานี้หรือไม่?
ahorn

คำตอบ:


18

ตามที่ Microsoft:

  • Windows API ดั้งเดิม จำกัด ชื่อเส้นทางไว้ที่ 260 ตัวอักษรแม้กระทั่งสำหรับแอพพลิเคชั่นที่พัฒนาขึ้นสำหรับเวอร์ชั่นล่าสุด

  • แอปพลิเคชันที่ใช้ Unicode-API ตระหนักถึงสามารถใช้รูปแบบของเส้นทางที่อนุญาตได้ถึง 32767 ตัวอักษร ชื่อไฟล์จะต้องมีการนำหน้าด้วย\\?\และต้องเป็นเส้นทางที่แน่นอนเช่นหรือ\\?\c:\dir\file \\?\UNC\server\share\fileมีข้อ จำกัด เพิ่มเติมดูอ้างอิงสำหรับรายละเอียด

หากคุณสามารถสร้างและใช้ลำดับชั้นของไฟล์แบบลึกและต้องการทำงานกับแอปพลิเคชันที่ระเบิดออกมาเนื่องจากความยาวชื่อไฟล์มีบางสิ่งที่คุณสามารถลองได้:

  • ใช้mklinkคำสั่งเพื่อสร้างลิงก์สัญลักษณ์และส่งพา ธ ที่ใช้ลิงก์ไปยังแอปพลิเคชันของคุณ

  • ใช้substคำสั่งเพื่อกำหนดอักษรชื่อไดรฟ์ให้กับไดเรกทอรี

  • เริ่มแอปพลิเคชันของคุณจากไดเรกทอรีที่ลึกและผ่านเส้นทางสัมพัทธ์สั้น ๆ

  • แทนที่ชื่อยาว ๆ ด้วยนามแฝง 8.3 ( micros~1) โดยสมมติว่าชื่อเหล่านั้นยังคงมีอยู่ใน Windows 7 หากคุณมีmicros~1อยู่ข้างmicros~2ๆ ฉันไม่รู้ว่าจะบอกว่าอันไหน อาจเรียกใช้ DOS command.com(อีกครั้งโดยสมมติว่า Windows 7 ยังคงสามารถทำได้)


3
แม้แต่ Windows Explorer จาก Win7 ก็ดูเหมือนจะใช้ API ดั้งเดิม! ที่น่าเสียดาย.

3
แบ็กสแลชที่มากกว่า `` \\? \: :-)
แหวนØ

@Gilles, micros ~ 1 และ micros ~ 2 เป็นมาตรฐานทั่วทั้งระบบหรือเป็นแบบสุ่มหรือไม่?
Pacerier

@Pacerier ไดเรกทอรีใดก็ตามที่ถูกสร้างขึ้นครั้งแรกmicros~1ดังนั้นมันจึงเป็นการสุ่ม
Gilles 'หยุดชั่วร้าย'

0

คุณสามารถใช้ชื่อย่อ (8.3) สำหรับโฟลเดอร์และไฟล์ทั้งหมดของคุณ

คุณต้องแน่ใจว่าเปิดใช้งานอยู่

ชื่อไฟล์แบบยาวถือว่าเป็นชื่อไฟล์ใด ๆ ที่มีขนาดสั้นกว่า MS-DOS แบบสั้น (หรือที่เรียกว่า 8.3) แบบแผนการตั้งชื่อ โดยทั่วไปแล้ว Windows จะเก็บชื่อไฟล์ไว้บนดิสก์เป็นรายการไดเรกทอรีพิเศษซึ่งสามารถปิดใช้งานทั้งระบบได้ด้วยเหตุผลด้านประสิทธิภาพขึ้นอยู่กับระบบไฟล์เฉพาะ เมื่อคุณสร้างชื่อไฟล์แบบยาว Windows อาจสร้างชื่อสั้น ๆ ในรูปแบบ 8.3 เรียกว่านามแฝง 8.3 และเก็บไว้ในดิสก์ด้วย นามแฝง 8.3 นี้สามารถปิดการใช้งานสำหรับปริมาณที่ระบุ

(ตัวหนาของฉัน)

คุณจะต้องเขียนโค้ดบางส่วนเพื่อให้ได้ชื่อย่อจากชื่อยาว

แหล่ง


2
ฮ่า ๆ ... ฉันจำวันนี้ได้ดีใน Windows 95 เมื่อเราทุกคนได้รับสุดยอด FAT32 ที่มีชื่อไฟล์ยาว 256 ตัว! นั่นเป็นเรื่องที่มหัศจรรย์ (ในวันนี้) และฉันตกใจจริงๆที่ข้อ จำกัด ชื่อไฟล์ยังอาจจะเป็นปัญหาในเหล่านี้วัน ปี 2010! Windows เป็นโบราณจริงๆ ...

0

ชื่อไฟล์ / ไดเรกทอรีใน NTFS ถูก จำกัด ไว้ที่ 255 unicode codepoints เนื่องจากความยาวจะถูกเก็บไว้เป็นไบต์ แต่ไม่มีข้อ จำกัด โดยธรรมชาติของความยาวเส้นทางทั้งหมด

การเรียก Win32 API จำนวนมาก (รวมถึงเชลล์ explorer) การโทรมีความยาวสูงสุดที่ 260 - 1 การโทรอื่น ๆ บางอย่างมีความสามารถในการใช้คำนำหน้า \\? \ เพื่อให้ได้มากถึง 32K (น้อยกว่าเล็กน้อยเนื่องจากชื่อไดรฟ์ได้รับการแทนที่ใน Kernel-land)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.