เส้นทางไฟล์ที่ยาวที่สุดที่ Windows สามารถจัดการคืออะไร


คำตอบ:


48

ความยาวเส้นทางสูงสุด (จาก MSDN)

ในการ Windows API (มีข้อยกเว้นบางที่กล่าวถึงในย่อหน้าต่อไปนี้) ความยาวสูงสุดสำหรับเส้นทางคือMAX_PATH ซึ่งถูกกำหนดให้เป็น 260 ตัวอักษร เส้นทางโลคัลถูกจัดโครงสร้างตามลำดับต่อไปนี้: ตัวอักษรชื่อไดรฟ์เครื่องหมายแบ็กสแลชส่วนประกอบที่คั่นด้วยแบ็กสแลชและอักขระโมฆะสิ้นสุด ตัวอย่างเช่นพา ธ สูงสุดในไดรฟ์ D คือ "D: \ <สตริงอักขระพา ธ 256 ตัวอักษร> <NUL>" โดยที่ "<NUL>" แสดงถึงอักขระ null สิ้นสุดที่มองไม่เห็นสำหรับเพจรหัสของระบบปัจจุบัน (อักขระ <> ใช้ที่นี่เพื่อความชัดเจนที่มองเห็นและไม่สามารถเป็นส่วนหนึ่งของสตริงพา ธ ที่ถูกต้อง)


4
คุณควรพูดถึงว่าคุณสามารถจัดการเส้นทางที่เกินขีด จำกัด นี้ได้ด้วยการใส่คำนำหน้าด้วย '\\?' (ฉันคิดว่ามันเป็นลำดับตัวอักษรนั้น)
Joey

3
คุณควรระบุขีด จำกัด สำหรับเส้นทางแบบ Unicode ที่กล่าวถึงในย่อหน้าที่ 2: ~ 32k
akira

260? 256 ตัวอักษรโดยไม่คำนึงถึงไดรฟ์: \ และ terminator มันคือปี 2009 ทำไมเราถึงได้รับจำนวนไบต์ของตัวละครเพื่อเล่นด้วยเท่านั้น
Phoshi

@Phoshi APIs ที่ใช้เส้นทางที่ยาวขึ้นนั้นไม่ได้ใช้งานโดยระบบปฏิบัติการโดยค่าเริ่มต้นเนื่องจากการส่งสตริงที่มีความยาวตามอำเภอใจไปยังแอปพลิเคชันที่เขียนโดยนักพัฒนาที่รู้ว่าเส้นทางจะไม่ยาวเกิน 260 ตัวอักษรและตัดสินใจจัดสรรความยาว array ที่จะเก็บไว้จะส่งผลให้มีบัฟเฟอร์จำนวนมากล้นซึ่งนำไปสู่แอปพลิเคชันที่หยุดทำงานและ / หรือถูกใช้ประโยชน์ การใช้งานที่ดีขึ้นเล็กน้อยโดย devs ที่มีความรู้ผิดเหมือนกันจะยกเลิกเนื่องจากการตรวจสอบเส้นทางของพวกเขารายงานข้อผิดพลาดที่ยาวเกินไป
Dan Neely

15

เส้นทางไฟล์ XP - 250 ตัวอักษร

เส้นทางไฟล์ Vista - 260 ตัวอักษร

เส้นทางที่ยาวที่สุดในการติดตั้ง Windows XP ใหม่ทั้งหมดคือ 152 ตัวอักษร

เส้นทางที่ยาวที่สุดในการติดตั้ง Windows Vista แบบกึ่งสะอาดคือ 195 ตัวอักษร:

Windows XP อนุญาตให้ตั้งชื่อไฟล์ได้ไม่เกิน 255 อักขระ

Windows Vista อนุญาตให้มีชื่อไฟล์ที่ยาวได้ถึง 260 ตัวอักษร

http://www.codinghorror.com/blog/archives/000729.html


5
นี้เป็นจริงเพียงถ้าคุณไม่ใช้ Unicode-API ซึ่งขยายขีด จำกัด บิต (~ 32k ดูmsdn.microsoft.com/en-us/library/... )
อากิระ

1
อืมม ในอัตราดังกล่าวขีด จำกัด ใน Win7 ควรอยู่ที่ประมาณ 265 ตัวอักษรไม่ใช่หรือ?
ต้มตุ๋น Quixote

ทำไมพวกเขาถึงเพิ่มขีด จำกัด สิบตัวละคร? ดูเหมือนจะไม่คุ้มค่าหรือไม่: \
Phoshi

สิ่งนี้ไม่ถูกต้อง ความยาวชื่อไฟล์สูงสุดยังคงเป็น 255 อักขระใน Windows ใด ๆ เนื่องจากเป็นขีด จำกัด ของระบบไฟล์ NTFS
phuclv

8

ค่าคงที่ของ Windows MAX_PATHเท่ากับ 260 อย่างที่คำตอบอื่น ๆ บอกอย่างไรก็ตามเส้นทางที่ยาวที่สุดที่แท้จริงคือ 32767

ดูที่นี่

32k กำลังใช้ UNICODE แต่ตอนนี้เราต้องใช้มันดังนั้นเราควรใช้ความยาวพา ธ สูงสุดเช่นกัน

นอกจากนี้คุณสามารถดูคำตอบของฉันใน SOซึ่งอธิบายรายละเอียดเพิ่มเติมเกี่ยวกับความยาวเส้นทางสูงสุด


1

"คลาสสิก"ขีด จำกัด260ตัวอักษร: drive letter+ :\+ 255 characters of filename+ \(หรือสำหรับการปัดเศษ) + null terminatorเป็นกล่าวในคำตอบอื่น ๆ

อย่างไรก็ตามข้อ จำกัด ภายในที่แท้จริงคือ32767ตัวอักษรซึ่งสามารถทำได้โดยการต่อท้าย\\?\เพื่อรับเส้นทางที่ผ่านการรับรองโดยสมบูรณ์

Windows API มีฟังก์ชั่นมากมายที่มีรุ่น Unicode เพื่ออนุญาตให้ใช้พา ธ ที่มีความยาวแบบขยายสำหรับความยาวพา ธ รวมสูงสุดที่ 32,767 อักขระ พา ธ ประเภทนี้ประกอบด้วยส่วนประกอบที่คั่นด้วยแบ็กสแลชแต่ละค่าจนถึงค่าที่ส่งคืนในlpMaximumComponentLengthพารามิเตอร์ของGetVolumeInformationฟังก์ชัน (ค่านี้โดยทั่วไปคือ 255 อักขระ) หากต้องการระบุพา ธ ที่มีความยาวเพิ่มให้ใช้ส่วน"\\?\"นำหน้า ตัวอย่างเช่น"\\?\D:\very long path".

หากเนื่องจากเหตุผลบางประการไม่สามารถใช้พา ธ ที่ผ่านการรับรองโดยสมบูรณ์ได้คุณสามารถเข้าถึงไดเรกทอรีที่ลึกกว่าได้ด้วยการติดตั้งตัวอักษรชื่อไดรฟ์ที่มีsubst/ diskpartหรือโดยการสร้างjunction / symlinkเพื่อทำให้เส้นทางสั้นลง

ตั้งแต่ Windows 10 MAX_PATHขีด จำกัด นี้ก็ถูกลบด้วยเช่นกันแม้ว่าจะไม่ใช่โดยค่าเริ่มต้น

เริ่มตั้งแต่ Windows 10 รุ่น 1607 MAX_PATHข้อ จำกัด ได้ถูกลบออกจากไฟล์ Win32 ทั่วไปและฟังก์ชั่นไดเรกทอรี อย่างไรก็ตามคุณต้องเลือกใช้พฤติกรรมใหม่

https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file

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