Giới hạn tên đường dẫn 256 ký tự


17

Sau một thời gian dài nghiên cứu, cuối cùng tôi đã phát hiện ra rằng tên đường dẫn không thể dài hơn 256 ký tự ngay cả trong Microsoft Windows 7. Tôi thực sự không hiểu tại sao lại có giới hạn ngu ngốc như vậy, vì NTFS có thể xử lý tới ~ 32.000 ký tự chiều dài mà không có vấn đề gì kể từ hơn một chục năm! Không có khả năng để thay đổi điều đó? Hoặc có bất kỳ giải pháp thiết thực để tránh điều đó?

260 ký tự chỉ là rất ít cho các trường hợp sử dụng đơn giản như một số thư mục ảnh lồng nhau với tên tệp dài.


1
Tôi nghĩ rằng điều đáng lo ngại là có những chương trình cũ hơn có ý tưởng được mã hóa cứng về việc một con đường nên dài bao nhiêu, để nếu bạn cố gắng sử dụng chúng trên những con đường dài hơn, chúng sẽ bùng nổ theo những cách thú vị.
DSolimano

Hệ điều hành Linux có vấn đề này không?
Ahorn

Câu trả lời:


18

Theo Microsoft:

  • API Windows truyền thống giới hạn tên đường dẫn thành 260 ký tự, ngay cả đối với các ứng dụng được phát triển cho phiên bản mới nhất.

  • Các ứng dụng sử dụng API nhận biết Unicode có thể sử dụng một dạng đường dẫn cho phép tối đa 32767 ký tự. Tên tệp phải được thêm tiền tố \\?\và phải là một đường dẫn tuyệt đối, ví dụ: \\?\c:\dir\filehoặc \\?\UNC\server\share\file. Có những hạn chế hơn nữa, xem tài liệu tham khảo để biết chi tiết.

Nếu bạn đã quản lý để tạo và sử dụng hệ thống phân cấp tệp sâu và cần phải làm việc với một ứng dụng đánh bom vì độ dài tên tệp, có một số điều bạn có thể thử:

  • Sử dụng mklinklệnh để tạo các liên kết tượng trưng và chuyển một đường dẫn sử dụng chúng đến ứng dụng của bạn.

  • Sử dụng substlệnh để gán một ký tự ổ đĩa cho một thư mục.

  • Bắt đầu ứng dụng của bạn từ một thư mục sâu và vượt qua nó các đường dẫn tương đối ngắn.

  • Thay thế một số tên dài bằng 8.3 bí danh ( micros~1), giả sử những cái đó vẫn tồn tại trong Windows 7. Nếu bạn có micros~1bên cạnh micros~2, tôi không biết làm thế nào để biết cái nào là cái nào; có lẽ chạy DOS command.com(một lần nữa, giả sử Windows 7 vẫn có thể làm được).


3
Chà, ngay cả Windows Explorer từ Win7 dường như cũng sử dụng API truyền thống! Đó là một điều đáng tiếc.

3
Thậm chí nhiều dấu gạch chéo ngược `\\? \` :-)
Đổ chuông

@Gilles, micros ~ 1 và micros ~ 2 được chuẩn hóa trên toàn hệ thống hay là ngẫu nhiên?
Pacerier

@Pacerier Bất kỳ thư mục nào được tạo trước tiên micros~1, vì vậy về cơ bản là ngẫu nhiên.
Gilles 'SO- ngừng trở nên xấu xa'

0

Bạn có thể sử dụng tên ngắn (8.3) cho tất cả các thư mục và tệp của mình.

Bạn cần chắc chắn rằng chúng được kích hoạt mặc dù.

Tên tệp dài được coi là bất kỳ tên tệp nào vượt quá quy ước đặt tên kiểu MS-DOS (còn gọi là 8.3). Thông thường, Windows lưu trữ tên tệp dài trên đĩa dưới dạng các mục nhập thư mục đặc biệt, có thể bị vô hiệu hóa toàn hệ thống vì lý do hiệu suất tùy thuộc vào hệ thống tệp cụ thể. Khi bạn tạo một tên tệp dài, Windows cũng có thể tạo một dạng tên 8.3 ngắn, được gọi là bí danh 8.3 và cũng lưu nó trên đĩa. Bí danh 8.3 này có thể được tắt cho một khối lượng được chỉ định.

(đậm của tôi)

Bạn cũng sẽ phải viết một số mã để có được tên ngắn từ tên dài.

Nguồn


2
haha ... tôi có thể nhớ rất rõ những ngày này trong Windows 95 khi tất cả chúng ta đều có bộ đôi siêu nhân FAT32 này với 256 tên tập tin dài! Điều đó thật tuyệt vời (vào những ngày này) và tôi thực sự sốc khi giới hạn tên tệp vẫn có thể là một vấn đề trong những ngày này . 2010! Windows thực sự cổ xưa ...

0

Tên tệp / thư mục trong NTFS được giới hạn ở 255 điểm mã unicode, vì độ dài được lưu trữ dưới dạng byte. Nhưng không có giới hạn vốn có của tổng chiều dài đường dẫn.

Nhiều lệnh gọi API Win32 (bao gồm cả trình thám hiểm shell) có giới hạn độ dài 260 - 1. Một số cuộc gọi khác có khả năng sử dụng tiền tố \\? \ Để nhận tới 32K (ít hơn một chút, vì tên âm lượng được thay thế trong Kernel-land)

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.