Trang chủ » làm thế nào để » Tại sao Windows Báo cáo Thư mục này quá dài để sao chép?

    Tại sao Windows Báo cáo Thư mục này quá dài để sao chép?

    Nếu bạn làm việc với Windows đủ lâu, đặc biệt là với các thư mục và tệp có tên dài, bạn sẽ gặp phải một lỗi kỳ lạ: Windows sẽ báo cáo rằng đường dẫn thư mục hoặc tên tệp quá dài để di chuyển đến đích mới hoặc thậm chí xóa. Thỏa thuận là gì?

    Này, làm thế nào để đam mê!

    Vì vậy, một ngày khác, tôi đã sắp xếp lại một số tệp trên máy tính của mình, tạo các thư mục, loại công cụ đó. Sau đó, khi tôi đang di chuyển một số tệp vào một thư mục, tôi nhận được một tin nhắn, nói rằng đường dẫn thư mục kết quả sẽ quá dài. Tôi đã nhầm lẫn. Tôi biết rằng mọi hệ điều hành duy nhất kể từ khi DOS hỗ trợ Tên tệp dài, nhưng Windows tuyên bố rằng đường dẫn quá dài? Lý do tại sao điều này xảy ra?

    Trân trọng,

    Ông vô tổ chức

    Vấn đề bạn gặp phải là một giao điểm đáng tiếc của hai hệ thống, trong trường hợp như thế này, sẽ gây ra lỗi. Để hiểu chính xác lỗi xuất phát từ đâu, chúng ta cần đi sâu vào lịch sử của Tên dài (LFN) và cách Windows tương tác với chúng trước khi chúng ta đi sâu vào giải pháp.

    Tên tệp dài đã được giới thiệu, thông qua kiến ​​trúc MS-DOS bên dưới, trong Windows 95. Hệ thống LFN mới cho phép tên tệp và thư mục có tối đa 255 ký tự. Đây là một bản mở rộng đáng hoan nghênh của hệ thống tên tệp trước đó, thường được gọi là tên tệp 8.3 vì tên được giới hạn ở tám ký tự và phần mở rộng ba chữ số, nhưng còn được gọi là Tên tệp ngắn (SFN). Như bạn có thể tưởng tượng, hồi đó vẫn còn rất nhiều ứng dụng dựa trên DOS và có nhiều hơn một vài vấn đề đau đầu khi cố gắng để các LFN mới hơn và các SFN kế thừa chơi tốt với nhau. Nếu bạn đã từng bắt gặp một đĩa mềm hoặc CD-ROM cũ hơn với các tệp bị cắt ngắn kỳ lạ trên nó (như abcdef ~ 1.txt) thì tên tệp đó đã bị cắt bởi một số ứng dụng kế thừa sử dụng SFN từ một số ứng dụng kế thừa dài hơn và không được hỗ trợ (như abcdefghijk. txt).

    Tuy nhiên, chúng ta đang đi một chặng đường dài từ giữa những năm 1990, và toàn bộ điều Long Filename là (phần lớn) được giải quyết chắc chắn. Nếu bạn đang chạy một phiên bản Windows từ 10 năm trước, có khả năng bạn sẽ không bao giờ gặp phải xung đột chiều dài tên tệp như chúng ta đã từng gặp phải trong DOS / Windows 95 ngày. Điều đó nói rằng, chúng tôi vẫn gặp trục trặc, như bạn đã phát hiện ra với dự án dọn đĩa của bạn. Nhưng tại sao? Nếu hệ thống Tên tệp dài của Windows hỗ trợ các thư mục và tên tệp tối đa 255 ký tự cho mỗi thành phần, bạn đang chạy vào bức tường nào? Chúng ta không thể đổ lỗi cho NTFS (hệ thống tệp mà phần lớn các máy Windows hiện đại sử dụng) vì NTFS sẽ hỗ trợ một chuỗi các thư mục và tên tệp có tổng độ dài đường dẫn là 32.767 ký tự. Điều đó vượt xa cấu trúc thư mục điển hình mà hầu hết người dùng sẽ cần.

    Trường hợp tất cả sụp đổ là một hạn chế nhân tạo Ngăn xếp Windows trên đầu hệ thống LFN / NTFS: biến MAX_PATH. Biến MAX_PATH chỉ định rằng cấu trúc thư mục hoàn chỉnh trong Windows không thể vượt quá 260 tổng số ký tự, bao gồm ký tự ổ đĩa, dấu hai chấm, dấu gạch chéo ngược và dấu gạch chéo ngược ở cuối. Do đó, bạn chỉ có MAX_PATH thực tiềm năng gồm 256 ký tự, ví dụ:. C: \ your-256-character-path \.

    Vì vậy, điều xảy ra khi bạn dọn dẹp máy tính là bạn có một thư mục có đường dẫn dài (vì tên thư mục dài, tên tệp dài hoặc cả hai) và khi bạn cố di chuyển một hoặc nhiều các thư mục đó vào một thư mục khác có đường dẫn dài, tổng độ dài của tên đường dẫn vượt quá giới hạn 260 ký tự được áp đặt bởi biến MAX_PATH.

    Bây giờ, bạn có thể đang nghĩ về Ah Ah-hah! Chúng ta sẽ chỉ thay đổi biến MAX_PATH và giải quyết vấn đề! Hãy than ôi, điều đó không đơn giản. Không chỉ là biến MAX_PATH về cơ bản được mã hóa cứng vào Windows, mà ngay cả khi bạn đã trải qua những rắc rối to lớn khi thay đổi nó, cuối cùng bạn cũng sẽ phá vỡ rất nhiều thứ đáng giá. Quá nhiều ứng dụng mong đợi biến đường dẫn là thứ mà Windows đã chỉ định từ lâu. Chúng ta không thể cứ thay đổi nó mà không tạo ra một mớ hỗn độn.

    Nơi đó để lại cho bạn? Vâng, giải pháp đơn giản nhất là chỉ cần chỉnh sửa dữ liệu đường dẫn. Ví dụ: nếu bạn có rất nhiều bài viết đã lưu trong đó ứng dụng / tiện ích mở rộng bạn đã sử dụng để lưu chúng từ web đã tạo một thư mục có tiêu đề đầy đủ của bài viết + dẫn bài viết, và sau đó tên tệp là tiêu đề đầy đủ của bài viết + khách hàng tiềm năng của bài viết, sẽ rất đơn giản để đạt hoặc vượt quá MAX_PATH chỉ với một lần lưu. Chỉnh sửa các tiêu đề thư mục và bài viết khổng lồ xuống kích thước hợp lý hơn là cách dễ dàng để khắc phục sự cố.

    Nếu bạn có một số lượng lớn tệp có đường dẫn dài và bạn không muốn chỉnh sửa tất cả (hoặc nếu bạn muốn xóa bỏ một tấn các thư mục cũ quá dài để Windows xử lý khi bị hạn chế bởi biến MAX_PATH), có một dòng lệnh hoạt động xung quanh. Mặc dù Windows bị hạn chế bởi biến MAX_PATH, các kỹ sư Windows nhận ra rằng sẽ có những tình huống trong đó người dùng sẽ cần phải xử lý các tên đường dẫn dài hơn. Như vậy, API Windows có chức năng xử lý các đường dẫn cực dài.

    Để tận dụng API đó và sử dụng các công cụ dòng lệnh trên các thư mục / tên tệp khó sử dụng của bạn, bạn chỉ cần nối thêm tên thư mục với một vài ký tự phụ. Ví dụ: nếu bạn có một cấu trúc thư mục lớn mà bạn muốn xóa (nhưng đã nhận được lỗi do độ dài đường dẫn khi bạn thử nó), bạn có thể thay đổi lệnh từ:

    rmdir c: \ Documents \ some-really-super-long-thư mục-name -eme \

    đến:

    rmdir \\? \ c: \ Documents \ some-really-super-long-thư-name -eme \

    Điều quan trọng là sự bổ sung của \? phần trước khi bắt đầu đường dẫn tập tin; điều này hướng dẫn Windows bỏ qua các giới hạn được đặt ra bởi biến MAX_PATH và tương tác với đường dẫn bạn vừa cung cấp được cung cấp / hiểu trực tiếp bởi hệ thống tệp bên dưới (có thể hỗ trợ rõ ràng đường dẫn dài hơn). Như mọi khi, hãy thận trọng tại dấu nhắc lệnh để tránh vô tình xóa các tệp hoặc thư mục bạn định giữ nguyên.

    Nếu tổng quan của chúng tôi về vấn đề này khiến bạn tò mò, chắc chắn hãy tìm hiểu bài viết này từ thư viện Microsoft Developer Network, Đặt tên tệp, đường dẫn và không gian tên, để biết thêm thông tin về những gì đang diễn ra.


    Có một câu hỏi công nghệ cấp bách? Bắn email cho chúng tôi tại [email protected] và chúng tôi sẽ cố gắng hết sức để trả lời nó.