Mặc dù NTFS cho phép các đường dẫn dài khoảng 32.000 ký tự, nhưng bạn đã tìm thấy giới hạn độ dài đường dẫn 259 ký tự của API Win32 .
Trong API Windows (với một số ngoại lệ được thảo luận trong [tài liệu được liên kết]), độ dài tối đa cho một đường dẫn là MAX_PATH
, được xác định là 260 ký tự.
(Ngoài ra còn có một NULL
ký tự chấm dứt được gắn vào đường dẫn, cung cấp cho chúng tôi 259 ký tự có thể sử dụng.)
Vì Explorer (và hầu hết tất cả các ứng dụng Windows khác) dựa vào API Win32 để truy cập hệ thống tệp, nên việc khắc phục giới hạn này là không thực tế: mặc dù có thể :
API Windows có nhiều chức năng cũng có phiên bản Unicode để cho phép đường dẫn có độ dài mở rộng cho tổng chiều dài đường dẫn tối đa là 32.767 ký tự. Loại đường dẫn này bao gồm các thành phần được phân tách bằng dấu gạch chéo ngược, mỗi đường dẫn đến giá trị được trả về trong lpMaximumComponentLength
tham số của GetVolumeInformation
hàm (giá trị này thường là 255 ký tự). Để chỉ định đường dẫn có độ dài mở rộng, hãy sử dụng tiền tố "\\? \". Ví dụ: "\? \ D: \ đường dẫn rất dài ".
Thật không may, bạn không thể chỉ cần gõ \\?\D:\very long path
vào một cửa sổ Explorer. Ứng dụng phải được thiết kế để tận dụng các API này và xử lý các tên đường dẫn rất dài.
Một cách để truy cập các đường dẫn có độ dài mở rộng trong Windows là cài đặt Cygwin , lớp mô phỏng * nix cho Windows. Trong thử nghiệm của tôi, Cygwin dường như không bị giới hạn bởi MAX_PATH
; bash và vi không có vấn đề với đường dẫn dài 2.000 ký tự.
Hãy nhớ rằng mặc dù bạn có thể sử dụng bash để duyệt các đường dẫn có độ dài mở rộng, nhưng bạn có thể sẽ không thể mở các tệp trong các đường dẫn đó trong các ứng dụng Windows thông thường. Ví dụ, nhập notepad
trong khi thư mục làm việc là một đường dẫn có độ dài mở rộng sẽ giúp bạn
Lỗi: Thư mục làm việc hiện tại có đường dẫn dài hơn mức cho phép đối với thư mục làm việc Win32. Không thể khởi động ứng dụng Windows gốc từ đây.
Và cố gắng notepad "\\?\D:\very long path\file.txt"
cũng không hoạt động; nó khởi chạy, nhưng chỉ nói "Không thể tìm thấy tệp ..." Cố gắng tương tự với Notepad ++ làm hỏng nó. (Có lẽ là tràn bộ đệm.)
Tùy chọn khác của bạn để truy cập các tệp cụ thể được chôn sâu trong một đường dẫn có độ dài mở rộng là rút ngắn chính đường dẫn đó bằng cách tạo một điểm nối NTFS . Từ một dấu nhắc lệnh nâng cao:
D:\> mklink /J jct "\\?\D:\very\long\path"
Bây giờ bạn có thể truy cập nội dung D:\very\long\path\
từ D:\jct\
. Bạn sẽ không gặp phải bất kỳ vấn đề nào về độ dài đường dẫn bởi vì liên quan đến Explorer và các ứng dụng khác, đường dẫn chỉ là D:\jct\
(hoặc bất cứ điều gì). Trình điều khiển NTFS xử lý chuyển hướng đường dẫn ("điểm lặp lại") trong suốt.
Nhược điểm của phương pháp này rõ ràng là bạn phải tạo một đường nối gần tệp bạn muốn truy cập; bạn vẫn không thể duyệt toàn bộ cấu trúc thư mục.
Về các ký tự đặc biệt ( " * : < > ? \ |
), đó đơn giản là không có. Những ký tự đó có ý nghĩa đặc biệt trong Windows, vì vậy không thể sử dụng chúng trong các đường dẫn. (Cygwin cho phép bạn tạo các tệp có các ký tự đặc biệt, nhưng thực tế là bằng cách thay thế các ký tự bằng các ký tự Unicode đặc biệt, sau đó nó sẽ thay thế trở lại khi đọc. các ký tự Unicode sẽ không được thay thế trở lại.)
Tất cả những gì đã nói, bạn đang làm gì đòi hỏi những con đường rất dài? Có lẽ bạn có thể làm cho cuộc sống của bạn dễ dàng hơn bằng cách đánh giá lại những gì bạn đang làm và tránh những con đường dài. Rất có thể, dù sao bạn cũng không cần đường dẫn .