Đường dẫn tệp dài nhất mà Windows có thể xử lý là gì?


57

Đường dẫn tệp dài nhất mà Windows có thể xử lý là gì?

Câu trả lời:


48

Độ dài đường dẫn tối đa (từ MSDN)

Trong API Windows (với một số ngoại lệ được thảo luận trong các đoạn sau), độ dài tối đa cho một đường dẫn là MAX_PATH, được xác định là 260 ký tự . Một đường dẫn cục bộ được cấu trúc theo thứ tự sau: ký tự ổ đĩa, dấu hai chấm, dấu gạch chéo ngược, các thành phần được phân tách bằng dấu gạch chéo ngược và ký tự null kết thúc. Ví dụ: đường dẫn tối đa trên ổ D là "D: \ <một số chuỗi đường dẫn 256 ký tự> <NUL>" trong đó "<NUL>" đại diện cho ký tự null kết thúc vô hình cho bảng mã hệ thống hiện tại. (Các ký tự <> được sử dụng ở đây để rõ ràng trực quan và không thể là một phần của chuỗi đường dẫn hợp lệ.)


4
Bạn nên đề cập rằng bạn có thể xử lý các đường dẫn vượt quá giới hạn này bằng cách thêm tiền tố vào đó với `\?` (Tôi nghĩ đó là chuỗi ký tự đó).
Joey

3
bạn cũng nên nêu giới hạn cho các đường dẫn unicode được đề cập trong đoạn 2: ~ 32k
akira

260? 256 ký tự bỏ qua ổ đĩa: \ và terminator. Đó là năm 2009, tại sao chúng ta chỉ có một byte ký tự để chơi xung quanh?
Phoshi

@Phoshi Các API sử dụng các đường dẫn dài hơn không được HĐH sử dụng theo mặc định, bởi vì việc chuyển các chuỗi dài một cách tự nhiên đến các ứng dụng được viết bởi các nhà phát triển biết rằng đường dẫn không bao giờ có thể dài hơn 260 ký tự và quyết định phân bổ độ dài cố định mảng để giữ nó sẽ dẫn đến một số lượng lớn bộ đệm bị tràn dẫn đến các ứng dụng bị sập và / hoặc bị khai thác. Việc triển khai tốt hơn một chút bởi các nhà phát triển có cùng kiến ​​thức sai sẽ hủy bỏ vì xác thực đường dẫn của họ báo cáo lỗi quá dài.
Dan Neely

15

Đường dẫn tệp XP- 250 ký tự

Đường dẫn tệp Vista - 260 ký tự

Đường dẫn dài nhất trên bản cài đặt Windows XP sạch là 152 ký tự.

Con đường dài nhất trên bản cài đặt bán sạch của Windows Vista là 195 ký tự:

Windows XP cho phép tên tệp dài tối đa 255 ký tự

Windows Vista cho phép các tên tệp dài hơn chứa tới 260 ký tự.

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


5
điều này chỉ đúng nếu bạn không sử dụng unicode-api, nó mở rộng giới hạn một chút (~ 32k, xem msdn.microsoft.com/en-us/l Library / Lỗi )
akira

1
hừm Ở tốc độ đó, giới hạn trong Win7 phải là khoảng 265 ký tự, phải không?
quixote quixote

Tại sao họ sẽ tăng giới hạn thêm mười ký tự? Có vẻ như không đáng, phải không: \
Phoshi

điều này là không đúng. Độ dài tên tệp tối đa vẫn là 255 ký tự trong bất kỳ Windows nào, vì đó là giới hạn NTFS
phuclv

8

Hằng số Windows MAX_PATHbằng 260 như các câu trả lời khác nói, tuy nhiên, đường dẫn dài nhất thực sự là 32767.

Xem tại đây .

32k là trong khi sử dụng UNICODE, nhưng bây giờ chúng ta phải sử dụng nó, vì vậy chúng ta cũng nên sử dụng độ dài đường dẫn tối đa như vậy.

Ngoài ra, bạn có thể xem câu trả lời của tôi trong SO giải thích một số điều chi tiết hơn về độ dài đường dẫn tối đa.


1

Các "cổ điển" giới hạn là 260 ký tự: drive letter+ :\+ 255 characters of filename+ \(hoặc để làm tròn) + null terminatornhư đã nói trong câu trả lời khác

Tuy nhiên, giới hạn bên trong thực tế là 32767 ký tự có thể đạt được bằng cách nối thêm \\?\để có được đường dẫn đầy đủ

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 lpMaximumComponentLengththam số của GetVolumeInformationhà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:\very long path".

Nếu do một số lý do, các đường dẫn đủ điều kiện không thể được sử dụng thì có thể truy cập các thư mục sâu hơn bằng cách gắn vào ký tự ổ đĩa bằng subst/ diskparthoặc bằng cách tạo một đường nối / symlink để rút ngắn đường dẫn

Vì Windows 10, MAX_PATHgiới hạn cũng đã bị xóa mặc dù không theo mặc định

Bắt đầu từ Windows 10, phiên bản 1607, các MAX_PATHgiới hạn đã được xóa khỏi các chức năng thư mục và tệp Win32 phổ biến. Tuy nhiên, bạn phải chọn tham gia vào hành vi mới.

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.