ในขณะที่ NTFS ช่วยให้เส้นทางบางยาว 32,000 ตัวอักษรคุณได้พบ259 ตัวอักษรข้อ จำกัด ระยะเวลาในเส้นทางของ Win32 API
ใน Windows API (มีข้อยกเว้นบางอย่างที่กล่าวถึงใน [เอกสารที่เชื่อมโยง]) ความยาวสูงสุดสำหรับพา ธ คือMAX_PATH
ซึ่งถูกกำหนดเป็น 260 อักขระ
(นอกจากนี้ยังมีNULL
อักขระการเลิกต่อท้ายเส้นทางเพื่อให้เราใช้งานได้ 259 อักขระ)
เพราะ Explorer (และเกือบทุกปพลิเคชันอื่น ๆ ของ Windows) พึ่งพา API Win32 สำหรับการเข้าถึงระบบไฟล์ก็ไม่ได้ในทางปฏิบัติจะได้รับรอบข้อ จำกัด นี้ถึงแม้ว่ามันจะเป็นไปได้ :
Windows API มีฟังก์ชั่นมากมายที่มีรุ่น Unicode เพื่ออนุญาตให้ใช้พา ธ ที่มีความยาวแบบขยายสำหรับความยาวพา ธ รวมสูงสุดที่ 32,767 ตัวอักษร พา ธ ประเภทนี้ประกอบด้วยส่วนประกอบที่คั่นด้วยแบ็กสแลชแต่ละค่าจนถึงค่าที่ส่งคืนในlpMaximumComponentLength
พารามิเตอร์ของGetVolumeInformation
ฟังก์ชัน (ค่านี้โดยทั่วไปคือ 255 อักขระ) หากต้องการระบุพา ธ ที่มีความยาวเพิ่มให้ใช้ส่วนนำหน้า "\\? \" ตัวอย่างเช่น "\\? \ D: \ เส้นทางที่ยาวมาก "
น่าเสียดายที่คุณไม่สามารถพิมพ์ลง\\?\D:\very long path
ในหน้าต่าง Explorer ได้ แอปพลิเคชันต้องได้รับการออกแบบมาเพื่อใช้ประโยชน์จาก API เหล่านี้และจัดการชื่อเส้นทางที่ยาวมาก
วิธีหนึ่งในการเข้าถึงพา ธ ที่มีความยาวเพิ่มภายใต้ Windows คือการติดตั้งCygwinซึ่งเป็นเลเยอร์ emulation * nix สำหรับ Windows ในการทดสอบของฉัน Cygwin ไม่ได้ถูก จำกัด โดยMAX_PATH
; ทุบตีและ vi ไม่มีปัญหากับเส้นทางยาว 2,000 ตัวอักษร
โปรดทราบว่าแม้ว่าคุณสามารถใช้ทุบตีเพื่อเรียกดูเส้นทางที่มีความยาวเพิ่มคุณอาจจะไม่สามารถเปิดไฟล์ในเส้นทางเหล่านั้นในแอปพลิเคชัน Windows ปกติ ตัวอย่างเช่นการพิมพ์notepad
ในขณะที่ไดเรกทอรีทำงานเป็นเส้นทางที่มีความยาวเพิ่มเติมทำให้คุณได้รับ
ข้อผิดพลาด: ไดเรกทอรีการทำงานปัจจุบันมีเส้นทางยาวเกินกว่าที่อนุญาตสำหรับไดเรกทอรีการทำงาน Win32 ไม่สามารถเริ่มแอปพลิเคชัน Windows ดั้งเดิมจากที่นี่
และความพยายามnotepad "\\?\D:\very long path\file.txt"
ก็ไม่ได้ผลเช่นกัน มันเปิดตัว แต่เพียงแค่บอกว่า "ไม่สามารถหาไฟล์ ... " การพยายามทำเช่นเดียวกันกับNotepad ++จะขัดข้อง (อาจเป็นบัฟเฟอร์มากเกินไป)
ตัวเลือกอื่น ๆ ของคุณในการเข้าถึงไฟล์เฉพาะฝังลึกลงไปในเส้นทางที่ขยายความยาวคือการลดระยะเส้นทางของตัวเองโดยการสร้าง NTFS จุดเชื่อมต่อ จากพรอมต์คำสั่งที่ยกระดับ:
D:\> mklink /J jct "\\?\D:\very\long\path"
ตอนนี้คุณสามารถเข้าถึงเนื้อหาของจากD:\very\long\path\
D:\jct\
คุณจะไม่ประสบปัญหาความยาวเส้นทางเนื่องจากตราบใดที่ Explorer และแอปอื่น ๆ เกี่ยวข้องเส้นทางนั้นเป็นเพียงแค่D:\jct\
(หรืออะไรก็ตาม) โปรแกรมควบคุม NTFS จัดการการเปลี่ยนเส้นทางเส้นทาง ("จุดแยกวิเคราะห์ใหม่") อย่างโปร่งใส
ข้อเสียของวิธีนี้คือคุณต้องสร้างทางแยกใกล้กับไฟล์ที่คุณต้องการเข้าถึง คุณยังไม่สามารถเรียกดูโครงสร้างไดเรกทอรีทั้งหมดได้อย่างง่ายดาย
เกี่ยวกับอักขระพิเศษ ( " * : < > ? \ |
) นั่นเป็นเพียงการไม่ไป ตัวละครเหล่านั้นมีความหมายพิเศษใน Windows ดังนั้นจึงไม่สามารถใช้งานได้ในเส้นทาง (Cygwin ช่วยให้คุณสามารถสร้างไฟล์ที่มีอักขระพิเศษ แต่ทำได้โดยการแทนที่อักขระด้วยอักขระ Unicode พิเศษซึ่งจะทดแทนเมื่ออ่านการดูไฟล์ Cygwin ที่สร้างขึ้นเหล่านี้ภายใต้ Linux หรือใน Explorer จะดูไม่ถูกต้องเนื่องจาก อักขระ Unicode จะไม่ถูกแทนที่กลับ)
จากทั้งหมดที่กล่าวมาคุณกำลังทำอะไรที่ต้องใช้เส้นทางที่ยาวมาก? บางทีคุณอาจทำให้ชีวิตของคุณง่ายขึ้นโดยการประเมินสิ่งที่คุณทำและหลีกเลี่ยงเส้นทางที่ยาว โอกาสที่คุณไม่จำเป็นต้องมีเส้นทางที่ยาวอยู่แล้ว