โฮมเพจ » ทำอย่างไร » เหตุใด Windows จึงรายงานว่าโฟลเดอร์นี้ยาวเกินกว่าจะคัดลอกได้

    เหตุใด Windows จึงรายงานว่าโฟลเดอร์นี้ยาวเกินกว่าจะคัดลอกได้

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

    เฮ้วิธีการเกินบรรยาย!

    เมื่อวันก่อนฉันกำลังจัดระเบียบไฟล์บางไฟล์ในคอมพิวเตอร์ของฉันสร้างโฟลเดอร์ใหม่อีกครั้ง จากนั้นเมื่อฉันย้ายไฟล์บางไฟล์ไปยังโฟลเดอร์ฉันได้รับข้อความแจ้งว่าเส้นทางโฟลเดอร์ที่ได้นั้นยาวเกินไป ฉันสับสน. ฉันรู้ว่าทุกระบบปฏิบัติการเดียวตั้งแต่ DOS รองรับชื่อไฟล์ยาว แต่ Windows อ้างว่าเส้นทางยาวเกินไป? ทำไมสิ่งนี้ถึงเกิดขึ้น?

    sincerly,

    นายไม่เป็นระเบียบ

    ปัญหาที่คุณพบคือจุดเชื่อมต่อที่โชคร้ายของทั้งสองระบบซึ่งในกรณีเช่นนี้จะทำให้เกิดข้อผิดพลาด เพื่อให้เข้าใจได้อย่างแม่นยำว่าข้อผิดพลาดนั้นมาจากที่ใดเราต้องขุดลงไปในประวัติของ Long Filenames (LFN) และวิธีที่ Windows โต้ตอบกับข้อผิดพลาดเหล่านั้นก่อนที่เราจะทำการวิเคราะห์.

    มีการแนะนำชื่อไฟล์แบบยาวผ่านสถาปัตยกรรม MS-DOS ใน Windows 95 ระบบ LFN ใหม่ที่อนุญาตสำหรับชื่อไฟล์และไดเรกทอรีสูงสุด 255 อักขระ นี่เป็นส่วนขยายที่ต้อนรับของระบบชื่อไฟล์ก่อนหน้านี้ซึ่งมักจะเรียกว่าชื่อไฟล์ 8.3 เพราะชื่อนั้นถูก จำกัด ไว้ที่แปดตัวอักษรและนามสกุลสามหลัก แต่รู้จักกันในชื่อไฟล์ย่อ (SFN) อย่างที่คุณสามารถจินตนาการได้หลังจากนั้นยังมีแอพที่ใช้ DOS เป็นจำนวนมากและมีอาการปวดหัวมากกว่าสองสามครั้งที่พยายามรับ LFN ที่ใหม่กว่าและ SFN ดั้งเดิมที่เล่นกันได้ดี หากคุณเคยเจอดิสเก็ตต์หรือ CD-ROM รุ่นเก่าที่มีไฟล์ที่ถูกตัดทอนอย่างผิดปกติ (เช่น abcdef ~ 1.txt) ชื่อไฟล์นั้นถูกตัดโดย SFN ที่ใช้แอปพลิเคชันรุ่นเก่าจาก LFN ที่ยาวกว่าและไม่รองรับ txt).

    เราอยู่ไกลจากกลางปี ​​1990 อย่างไรก็ตามสิ่งที่ชื่อไฟล์ยาวทั้งหมดคือ (ส่วนใหญ่) รีดออกอย่างแน่นหนา หากคุณใช้งาน Windows รุ่นหนึ่งในช่วง 10 ปีที่ผ่านมาคุณอาจไม่เคยเจอกับความยาวของชื่อไฟล์อย่างที่เราเคยพบเจอใน DOS / Windows 95 วัน ที่กล่าวว่าเรายังคงพบอาการสะอึกตามที่คุณค้นพบกับโครงการล้างข้อมูลบนดิสก์ของคุณ แต่ทำไม หากระบบชื่อไฟล์แบบยาวของ Windows รองรับโฟลเดอร์และชื่อไฟล์ที่มีความยาวสูงสุด 255 ตัวอักษรต่อองค์ประกอบคุณใช้ส่วนไหนของกำแพง? เราไม่สามารถตำหนิ NTFS (ระบบไฟล์ที่เครื่อง Windows รุ่นใหม่ส่วนใหญ่ใช้) เนื่องจาก NTFS จะสนับสนุนการโยงโฟลเดอร์และชื่อไฟล์สูงสุดถึงความยาวพา ธ รวม 32,767 ตัวอักษร ไกลเกินกว่าโครงสร้างไดเรกทอรีทั่วไปที่ผู้ใช้ส่วนใหญ่ต้องการ.

    สิ่งที่แตกต่างกันคือข้อ จำกัด ของ Windows ที่ซ้อนอยู่ด้านบนของระบบ LFN / NTFS: ตัวแปร MAX_PATH ตัวแปร MAX_PATH ระบุว่าโครงสร้างไดเรกทอรีที่สมบูรณ์ใน Windows ต้องไม่เกิน 260 ตัวอักษรทั้งหมดรวมถึงอักษรชื่อไดรฟ์เครื่องหมายโคลอนแบ็กสแลชและแบ็กสแลชว่างในตอนท้าย ดังนั้นคุณจะมี MAX_PATH จริงที่เป็นไปได้เพียง 256 ตัวเท่านั้นเช่น. C: \ คุณ-256 ตัวอักษรเส้นทาง \.

    ดังนั้นสิ่งที่เกิดขึ้นเมื่อคุณทำความสะอาดคอมพิวเตอร์ของคุณคือคุณมีไดเรกทอรีที่มีเส้นทางยาวอยู่แล้ว (ไม่ว่าจะเป็นเพราะชื่อโฟลเดอร์ยาวชื่อไฟล์ยาวหรือทั้งสองอย่าง) และเมื่อคุณพยายามย้ายหนึ่งหรือมากกว่า ไดเร็กทอรีเหล่านั้นไปยังไดเร็กทอรีอื่นที่มีพา ธ ยาวความยาวรวมของชื่อพา ธ เกินขีด จำกัด อักขระ 260 ตัวที่กำหนดโดยตัวแปร MAX_PATH.

    ตอนนี้คุณอาจกำลังคิดว่า“ Ah-hah! เราจะเปลี่ยนตัวแปร MAX_PATH และแก้ปัญหา! "อนิจจามันไม่ง่ายอย่างนั้น ไม่เพียง แต่เป็นตัวแปร MAX_PATH ที่มีการเข้ารหัสอย่างหนักใน Windows แต่ถึงแม้ว่าคุณจะต้องเผชิญกับความยุ่งยากในการเปลี่ยนแปลงอย่างมาก แต่คุณก็จะต้องเสียมันไปมากจนไม่คุ้มค่า มีแอปพลิเคชั่นมากมายที่คาดว่าตัวแปรพา ธ จะเป็นสิ่งที่ Windows ระบุมานาน เราไม่สามารถเปลี่ยนมันได้โดยไม่ก่อให้เกิดความวุ่นวายมากมาย.

    นั่นจะทำให้คุณไปไหน ทางออกที่ง่ายที่สุดคือเพียงแค่แก้ไขข้อมูลเส้นทาง ตัวอย่างเช่นหากคุณมีบทความที่บันทึกไว้เป็นจำนวนมากซึ่งแอปพลิเคชัน / ส่วนขยายที่คุณใช้ในการบันทึกจากเว็บได้สร้างไดเรกทอรีที่เป็นชื่อเต็มของบทความ + บทความที่นำไปสู่และชื่อไฟล์นั้นเป็นชื่อเต็ม จากบทความ + การนำไปสู่บทความมันง่ายมากที่จะตีหรือสูงกว่า MAX_PATH ด้วยการบันทึกครั้งเดียว การแก้ไขชื่อโฟลเดอร์และบทความจำนวนมหาศาลให้มีขนาดที่เหมาะสมยิ่งขึ้นเป็นวิธีที่ง่ายในการแก้ไขปัญหา.

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

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

    rmdir c: \ documents \ some-really-super-long-folder-name-scheme \

    ไปที่:

    rmdir \\? \ c: \ documents \ some-real-super-long-folder-name-scheme \

    ที่สำคัญคือการเพิ่มของ \\ \ ส่วนก่อนที่จะเริ่มเส้นทางของไฟล์; สิ่งนี้สั่งให้ Windows ให้ละเว้นข้อ จำกัด ที่กำหนดโดยตัวแปร MAX_PATH และเพื่อโต้ตอบกับพา ธ ที่คุณให้มาตามที่ระบุ / เข้าใจโดยตรงจากระบบไฟล์พื้นฐาน (ซึ่งสามารถรองรับเส้นทางที่ยาวกว่าได้อย่างชัดเจน) และเช่นเคยให้ใช้ความระมัดระวังที่พรอมต์คำสั่งเพื่อหลีกเลี่ยงการลบไฟล์หรือไดเรกทอรีที่คุณตั้งใจทิ้งไว้โดยไม่ตั้งใจ.

    หากภาพรวมของปัญหานี้คุณอยากรู้อยากเห็นขุดแน่นอนในบทความนี้จากห้องสมุด Microsoft Developer Network, การตั้งชื่อไฟล์เส้นทางและ Namespaces สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่เกิดขึ้นภายใต้ประทุน.


    มีคำถามเทคโนโลยีเร่งด่วนหรือไม่ ยิงอีเมลหาเราที่ [email protected] และเราจะพยายามอย่างดีที่สุดเพื่อตอบคำถาม.