Tại sao giới hạn độ dài đường dẫn 260 ký tự tồn tại trong Windows?


390

Tôi đã gặp phải vấn đề này một vài lần tại những thời điểm không thuận lợi:

  • Cố gắng làm việc trên các dự án Java nguồn mở với các đường dẫn sâu
  • Lưu trữ cây wiki Fitnesse sâu trong kiểm soát nguồn
  • Lỗi khi sử dụng Bazaar để nhập cây kiểm soát nguồn của tôi

Tại sao giới hạn này tồn tại?

Tại sao nó chưa được gỡ bỏ?

Làm thế nào để bạn đối phó với giới hạn đường dẫn? Và không, chuyển sang Linux hoặc Mac OS X không phải là câu trả lời hợp lệ cho câu hỏi này;)


8
@Artelius: Trên thực tế, Windows (ít nhất là từ Win2K trở đi) không hỗ trợ các điểm nối ( en.wikipedia.org/wiki/NTFS_jeft_point ) và Vista trở đi hỗ trợ các liên kết NT Symbolic ( en.wikipedia.org/wiki/NTFS_symbolic_link ). Dù sao, trong khi các liên kết tượng trưng có thể giúp làm cho các đường dẫn dài hơn / lồng nhau trở nên thân thiện hơn, tôi không thể nghĩ các liên kết tượng trưng sẽ giúp ích như thế nào nếu bạn đạt giới hạn độ dài đường dẫn.
Ashutosh Mehra

8
Ngay cả khi giới hạn này không tồn tại, luôn có rất nhiều giới hạn khác và mỗi một trong số chúng có thể gây phiền nhiễu. Vấn đề là tại sao giới hạn này lại thấp như vậy? Sau kỷ nguyên 8.3 và với phần cứng có kích thước mega / giga, một đường dẫn giờ đây sẽ là một chuỗi được phân bổ động với kích thước hầu như không giới hạn.
Roland

12
Microsoft cuối cùng đã giải quyết vấn đề này, trong Windows 10 Build 14352.
Warren P

3
Có, và có vẻ như bạn phải sửa đổi bảng kê khai ứng dụng để nhận biết đường dẫn dài.
Warren P

3
@PatrickSzalapski tiếc là nó đã được cố định visualstudio.uservoice.com/forums/121579-visual-studio/...
phuclv

Câu trả lời:


231

Trích dẫn bài viết này https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#maximum-path-length-limitation

Giới hạn độ dài đường dẫn tối đa

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 tê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ệ.)

Bây giờ chúng ta thấy rằng đó là 1 + 2 + 256 + 1 hoặc [ổ đĩa] [: \] [path] [null] = 260. Người ta có thể cho rằng 256 là độ dài chuỗi cố định hợp lý từ thời DOS. Và quay trở lại API DOS, chúng tôi nhận ra rằng hệ thống đã theo dõi đường dẫn hiện tại trên mỗi ổ đĩa và chúng tôi có 26 (32 ký hiệu) ổ đĩa tối đa (và các thư mục hiện tại).

INT 0x21 AH = 0x47 cho biết Chức năng này trả về mô tả đường dẫn mà không có ký tự ổ đĩa và dấu gạch chéo ngược ban đầu. Vì vậy, chúng tôi thấy rằng hệ thống lưu trữ CWD dưới dạng một cặp (ổ đĩa, đường dẫn) và bạn yêu cầu đường dẫn bằng cách chỉ định ổ đĩa (1 = A, 2 = B, Lỗi), nếu bạn chỉ định 0 thì nó sẽ thừa nhận đường dẫn cho ổ đĩa được trả về bởi INT 0x21 AH = 0x15 AL = 0x19. Vì vậy, bây giờ chúng ta biết tại sao nó là 260 chứ không phải 256, vì 4 byte đó không được lưu trữ trong chuỗi đường dẫn.

Tại sao một chuỗi đường dẫn 256 byte, bởi vì 640K là đủ RAM.


21
API Windows giới hạn độ dài, ngay cả trong HĐH mới nhất. Microsoft sợ phá vỡ hàng trăm triệu hệ điều hành đang sử dụng ngày nay nếu điều này thay đổi vì họ không còn thiên tài làm việc cho họ nữa mà hiểu API bên trong và bên ngoài, giống như họ đã làm trong những năm 1980 và 1990. Rủi ro không đáng để thay đổi nó. serverfault.com/questions/163419/
Mạnh

77
@MacGyver Xin lỗi, nhưng điều đó hoàn toàn vô nghĩa. Microsoft không muốn phá vỡ hàng triệu ứng dụng được viết kém ngoài kia, giả định những điều về hệ thống không bao giờ được bảo đảm. Thật không may, mọi thứ đều giống nhau trong một thời gian dài đến nỗi các nhà phát triển đã dựa vào chúng, vì vậy việc thay đổi nó bây giờ sẽ phá vỡ các ứng dụng của bên thứ 3 và MS sẽ nhận lỗi.
Cơ bản

25
btw không có bằng chứng nào cho thấy Gates từng nói "640K Ram là đủ cho tất cả mọi người" computerworld.com/article/2534312
Patrick Favre

11
@Basic Giới hạn 260 ký tự được đảm bảo bởi Windows. Hằng số được khai báo là hằng số , một cấu trúc được khai báo trong các tệp tiêu đề Windows chỉ có chỗ cho 260 ký tự. Không có cách nào để thay đổi nó.
Ian Boyd

35
@Basic Hằng số không thay đổi một khi nó được biên dịch vào ứng dụng của tôi. Tôi chạy một ứng dụng được xây dựng lần cuối vào năm 1994 và vẫn chạy cho đến ngày hôm nay trong Windows 10. Microsoft hứa hẹn một kích thước nhị phân nhất định của một khối bộ nhớ và lập trình viên tuân theo quy tắc đó. Nếu Microsoft thay đổi hằng số, thì mọi ứng dụng hiện có, theo đúng API lập trình, sẽ bị phá vỡ . Bạn không thể phá vỡ tính tương thích nhị phân.
Ian Boyd

150

Điều này không hoàn toàn đúng vì hệ thống tệp NTFS hỗ trợ các đường dẫn lên tới 32k ký tự. Bạn có thể sử dụng \\?\tiền tố win32 và " " đường dẫn để sử dụng lớn hơn 260 ký tự.

Một lời giải thích chi tiết về con đường dài từ blog của nhóm .Net BCL .
Một đoạn trích nhỏ nêu bật vấn đề với những con đường dài

Một mối quan tâm khác là hành vi không nhất quán sẽ dẫn đến bằng cách phơi bày hỗ trợ đường dài. Các đường dẫn dài có \\?\tiền tố có thể được sử dụng trong hầu hết các API Windows liên quan đến tệp, nhưng không phải tất cả các API Windows. Ví dụ, LoadL Library, ánh xạ một mô-đun vào địa chỉ của quá trình gọi, không thành công nếu tên tệp dài hơn MAX_PATH. Vì vậy, điều này có nghĩa là MoveFile sẽ cho phép bạn di chuyển một DLL đến một vị trí sao cho đường dẫn của nó dài hơn 260 ký tự, nhưng khi bạn cố tải DLL, nó sẽ thất bại. Có các ví dụ tương tự trong các API Windows; một số cách giải quyết tồn tại, nhưng chúng dựa trên từng trường hợp cụ thể.


4
Đủ công bằng, nhưng điều đó có nghĩa là bạn phải sử dụng P / Gọi ở nhiều nơi và theo tôi, điều này làm giảm tính di động của mã .Net của bạn. Nếu tôi muốn giữ tính tương thích Mono thì sao?
Jeffrey Cameron

1
Quan điểm của tôi là bạn có thể sử dụng con đường dài nếu bạn thực sự muốn. Nhưng tôi đồng ý rằng đó là một nỗi đau và cá nhân tôi cũng sẽ tránh điều này.
softveda

5
Đây nên là câu trả lời được lựa chọn. Trên thực tế, trả lời câu hỏi được đặt ra bởi người dùng TẠI SAO giới hạn này tồn tại VÀ cung cấp giải pháp. Upvote cho khả năng hiển thị
KyleMit

2
Theo tôi, có vẻ như Microsoft cần sửa API của họ và tôi đoán đây không phải là ưu tiên. Tôi đã rất ngạc nhiên khi giới hạn này vẫn tồn tại trong Windows 8.
Mas

3
@Mas "Khắc phục" bạn muốn đã được thực hiện hoàn toàn trở lại Windows XP. Gọi phiên bản unicode của API của họ sẽ cho phép bạn truy cập vào "đường dẫn mở rộng". Tôi tin rằng explorer tự động xử lý này. Đây là một chức năng như vậy hỗ trợ nó - msdn.microsoft.com/en-us/l Library / windows /desktop / .
Natalie Adams

108

Câu hỏi là tại sao giới hạn vẫn tồn tại. Chắc chắn Windows hiện đại có thể tăng thêm khía cạnh MAX_PATHđể cho phép các đường dẫn dài hơn. Tại sao giới hạn không được gỡ bỏ?

  • Lý do không thể xóa là Windows hứa rằng nó sẽ không bao giờ thay đổi.

Thông qua hợp đồng API, Windows đã đảm bảo tất cả các ứng dụng rằng API tệp tiêu chuẩn sẽ không bao giờ trả lại đường dẫn dài hơn 260ký tự.

Hãy xem xét mã chính xác sau đây :

WIN32_FIND_DATA findData;

FindFirstFile("C:\Contoso\*", ref findData);

Windows đảm bảo chương trình của tôi rằng nó sẽ đưa vào WIN32_FIND_DATAcấu trúc của tôi :

WIN32_FIND_DATA {
   DWORD    dwFileAttributes;
   FILETIME ftCreationTime;
   FILETIME ftLastAccessTime;
   FILETIME ftLastWriteTime;
   //...
   TCHAR    cFileName[MAX_PATH];
   //..
}

Ứng dụng của tôi không khai báo giá trị của hằng số MAX_PATH, API Windows đã làm. Ứng dụng của tôi đã sử dụng giá trị được xác định.

Cấu trúc của tôi được xác định chính xác và chỉ phân bổ 592tổng số byte. Điều đó có nghĩa là tôi chỉ có thể nhận được một tên tệp nhỏ hơn 260ký tự. Windows hứa với tôi rằng nếu tôi viết ứng dụng của mình một cách chính xác, ứng dụng của tôi sẽ tiếp tục hoạt động trong tương lai.

Nếu Windows cho phép tên tệp dài hơn 260ký tự thì ứng dụng hiện tại của tôi (sử dụng đúng API chính xác) sẽ thất bại.

Đối với bất kỳ ai kêu gọi Microsoft thay đổi MAX_PATHhằng số, trước tiên họ cần đảm bảo rằng không có ứng dụng hiện có nào bị lỗi. Ví dụ, tôi vẫn sở hữu và sử dụng một ứng dụng Windows được viết để chạy trên Windows 3.11. Nó vẫn chạy trên Windows 10. 64 bit. Đó là những gì khả năng tương thích ngược mang lại cho bạn.

Microsoft đã tạo ra một cách để sử dụng đầy đủ 32.768 tên đường dẫn; nhưng họ phải tạo một hợp đồng API mới để làm điều đó. Đối với một, bạn nên sử dụng API Shell để liệt kê các tệp (vì không phải tất cả các tệp đều tồn tại trên ổ cứng hoặc chia sẻ mạng).

Nhưng họ cũng không được phá vỡ các ứng dụng người dùng hiện có. Phần lớn các ứng dụng không sử dụng api shell cho công việc tập tin. Mọi người chỉ cần gọi FindFirstFile/ FindNextFilevà gọi nó là một ngày.


4
@JosiahKeller Nếu làm như vậy, nó sẽ phá vỡ hợp đồng được xác định ban đầu cho phương thức đó và việc đó có thể ghi đè lên bộ nhớ ngoài ý muốn và mở ra một lỗ hổng bảo mật. Cách duy nhất để khắc phục điều này là cung cấp API cải tiến mới (như các biến thể nhận biết Unicode) và hy vọng mọi người biên dịch lại / phát hành lại tất cả các ứng dụng của họ bằng API mới hơn.
Rowland Shaw

2
@Ryios Tôi không nghĩ các ứng dụng Windows hiện tại của mình sẽ chạy trên Linux.
Ian Boyd

9
Khả năng tương thích ngược là tốt đẹp. Nhưng tôi nghĩ rằng việc tránh các vấn đề như vậy (thường thực sự khó chịu) ngày nay quan trọng hơn việc hỗ trợ các ứng dụng Windows 3.1. Có bao nhiêu người gặp phải vấn đề với những con đường dài? Và có bao nhiêu người vẫn sử dụng các ứng dụng Windows 3.1? Họ thậm chí hủy bỏ hỗ trợ cho Windows XP. Vậy tại sao họ không đưa ra một thông báo, rằng từ Windows [x] và các ứng dụng sau này cho rằng sẽ không có đường dẫn dài hơn 260 ký tự, sẽ không hoạt động như mong đợi khi chúng gặp phải một con đường dài? Giới hạn tốc độ của chúng tôi cũng không liên quan đến xe ngựa.
JuSchu

2
@JuSchu Không chỉ là ứng dụng Windows 3.1. Các ứng dụng được viết ngày hôm nay bằng cách sử dụng API chính xác sẽ không hoạt động.
Ian Boyd


62

Từ Windows 10. bạn có thể loại bỏ giới hạn bằng cách sửa đổi khoá đăng ký.

Mẹo Bắt đầu trong Windows 10, phiên bản 1607, các giới hạn MAX_PATH đã bị 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.

Khóa đăng ký cho phép bạn kích hoạt hoặc vô hiệu hóa hành vi đường dẫn mới. Để kích hoạt hành vi đường dẫn dài, đặt khóa đăng ký tại HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled(Loại REG_DWORD:). Giá trị của khóa sẽ được hệ thống lưu vào bộ nhớ cache (theo quy trình) sau lần gọi đầu tiên đến tệp Win32 hoặc chức năng thư mục bị ảnh hưởng (danh sách theo sau). Khóa đăng ký sẽ không được tải lại trong suốt vòng đời của quá trình. Để tất cả các ứng dụng trên hệ thống nhận ra giá trị của khóa, có thể cần phải khởi động lại vì một số quy trình có thể đã bắt đầu trước khi khóa được đặt. Khóa đăng ký cũng có thể được kiểm soát thông qua Chính sách nhóm tại Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long paths. Bạn cũng có thể kích hoạt hành vi đường dài mới cho mỗi ứng dụng thông qua bảng kê khai:

<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
        <ws2:longPathAware>true</ws2:longPathAware>
    </windowsSettings>
</application>

15
Đáng buồn là ngay cả trong phiên bản mới nhất Win10, bản thân File Explorer vẫn gặp vấn đề với việc xử lý tên đường dẫn dài. Ngay cả "Sao chép như đường dẫn" trong menu ngữ cảnh không hoạt động như mong đợi; nó chỉ sao chép 260 ký tự đầu tiên. Bạn không thể tạo thư mục, sao chép / di chuyển / mở tệp ... Làm cho tôi tự hỏi điểm thay đổi này là gì.
raymai97

Lưu ý rằng tuyên bố rằng cài đặt hệ thống độc lập với cài đặt tệp kê khai là sai. Cả hai đều được yêu cầu. Chính sách phải được kích hoạt ở cấp hệ thống và tệp kê khai phải tuyên bố rằng ứng dụng nhận biết đường dài.
Eryk CN

Tôi đọc được rằng việc thực hiện thay đổi này có thể gây ra sự cố tương thích với các ứng dụng 32 bit cũ hơn, nhưng loại sự cố này có tương thích phổ biến không? Tôi muốn tự mình thay đổi. lifehacker.com/ từ
KDP

32

Bạn có thể gắn một thư mục như một ổ đĩa. Từ dòng lệnh, nếu bạn có một đường dẫn, C:\path\to\long\folderbạn có thể ánh xạ nó tới ký tự lái xe X:bằng cách sử dụng:

subst x: \path\to\long\folder

tôi đang nhận được "Thông số không hợp lệ j:" khi thử lệnh này
barrypicker

Điều này cần phải được chạy từ một dấu nhắc lệnh của Quản trị viên (nâng cao).
Ông trùm

Điều này sẽ thất bại với dấu gạch chéo về phía trước, cần phải là dấu gạch chéo ngược.
cchamberlain

1
Tôi không chắc nếu điều này chỉ áp dụng cho windows 10, tuy nhiên tôi chỉ thấy rằng khi cố gắng chạy lệnh này, nếu tôi chạy như một quản trị viên như được đề xuất ở trên, ổ đĩa dường như không có sẵn. Điều này là do hành vi có vẻ tương tự như ánh xạ ổ đĩa mạng và là phiên cụ thể, v.v. nên khi tôi chạy với tư cách quản trị viên và sử dụng lệnh này, phiên đó có thể sử dụng x: TL; DR Nếu bạn không thể thấy ổ đĩa thử chạy lệnh mà không ở chế độ quản trị viên.
Jaddie

substlà phiên cục bộ / tài khoản - xem superuser.com/questions/29072/ cho cách làm cho nó 'toàn hệ thống'
user2864740

18

Một cách để đối phó với giới hạn đường dẫn là rút ngắn các mục nhập đường dẫn bằng các liên kết tượng trưng.

Ví dụ:

  1. tạo một C:\pthư mục để giữ các liên kết ngắn đến các đường dẫn dài
  2. mklink /J C:\p\foo C:\Some\Crazy\Long\Path\foo
  3. thêm C:\p\foovào con đường của bạn thay vì con đường dài

3
Không phải tạo thư mục trước, vì vậy bước 1 là không cần thiết.
ohaal

2
Thủ thuật này không phải lúc nào cũng hoạt động vì nhiều ứng dụng cố gắng giải quyết các liên kết
nponeccop

Các /jtùy chọn tạo ra một mountpoint ngã ba cho một thiết bị đĩa cục bộ hoặc một con đường trên một khối lượng địa phương (như một Unix ràng buộc gắn kết). Nó không tạo ra một liên kết tượng trưng. Đó là một sự khác biệt quan trọng vì các điểm gắn kết luôn được đánh giá trên máy chủ và phải nhắm mục tiêu các thiết bị cục bộ, trong khi các liên kết tượng trưng được đánh giá trên máy khách và có thể nhắm mục tiêu các đường dẫn từ xa (nếu được chính sách cho phép). Giống như một ổ đĩa.exe (tức là DefineDosDeviceW), mục tiêu tiếp giáp thường được giới hạn trong khoảng 4K ký tự. Đó thực sự là 8K ký tự, được chia đều giữa đường dẫn thay thế và đường dẫn hiển thị.
Eryk CN

12

Bạn có thể bật tên đường dẫn dài bằng PowerShell:

Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name LongPathsEnabled -Type DWord -Value 1 

Phiên bản khác là sử dụng Chính sách nhóm trong Computer Configuration/ Administrative Templates/ System/ Filesystem:

Biên tập chính sách nhóm


2
Mỗi ứng dụng vẫn phải tuyên bố rằng đó là nhận thức đường dài. Microsoft đã thực hiện một công việc kém khi truyền đạt điều này bằng cách làm cho nó có vẻ như bản kê khai ứng dụng chỉ là một cách khác để kích hoạt tính năng này, thay vì giải thích rõ ràng rằng đó là hợp đồng giữa HĐH (chính sách cấp hệ thống) và ứng dụng mà cả hai phải đồng ý.
Eryk CN

8

Về lý do tại sao điều này vẫn tồn tại - MS không coi đó là ưu tiên và đánh giá cao khả năng tương thích ngược so với việc nâng cao hệ điều hành của họ (ít nhất là trong trường hợp này).

Một cách giải quyết khác mà tôi sử dụng là sử dụng "tên ngắn" cho các thư mục trong đường dẫn, thay vì các phiên bản tiêu chuẩn, dễ đọc của con người. Vì vậy, ví dụ như đối với C:\Program Files\tôi sẽ sử dụng C:\PROGRA~1\ Bạn có thể tìm ra tương đương tên viết tắt sử dụng dir /x.


1
Tên đường dẫn ngắn có thể bị vô hiệu hóa trong sổ đăng ký (hoặc chính nó là hệ thống tệp?), Vì vậy đây thực sự không phải là một cách giải quyết đáng tin cậy.
rubenvb

3
@rubenvb Tôi chắc chắn rằng hầu hết các tính năng của Windows không thể bị vô hiệu hóa trong sổ đăng ký, vì vậy ¯ \ _ () _ /
Conrad

Tạo tên ngắn có thể bị vô hiệu hóa cho NTFS (và trong trường hợp này là không hiệu quả), cho toàn bộ hệ thống hoặc trên mỗi ổ đĩa, vì vậy đây là một cách tiếp cận không đáng tin cậy ngay cả đối với các đường dẫn trên ổ đĩa hệ thống, phải là NTFS. Bạn có thể đặt tên ngắn trên các tệp và thư mục theo cách thủ công ở NTFS, nhưng điều này không mở rộng sang các hệ thống tệp mới hơn không hỗ trợ tên ngắn, chẳng hạn như exFAT và ReFS. Tên ngắn nên được coi là một tính năng không dùng nữa được giữ lại để tương thích trong các trường hợp giới hạn, như API ANSI / OEM cũ bằng cách sử dụng mã hóa một byte và hai byte.
Eryk CN

@eryksun Xin vui lòng xem nhận xét trước đây của tôi về việc vô hiệu hóa tên đường dẫn ngắn. :) Chỉ vì bạn nghĩ rằng nó nên được coi là không dùng nữa, không có nghĩa là nó thực sự là như vậy. MS không có kế hoạch để từ chối tính năng này. (Ngoài ra, tại sao bạn cài đặt phần mềm Windows trên các phân vùng exFAT / ReFS?)
Conrad

Tôi vẫn nói chỉ sử dụng các đường dẫn thiết bị không được chuẩn hóa (ví dụ tiền tố "\\? \"), Vì chúng luôn có sẵn và rõ ràng. Ví dụ, dịch PATHvà chuyển nó đến SearchPathW. Nó cũng hiệu quả, vì thư viện thời gian chạy tạo đường dẫn thiết bị "\\? \" Cho NT. Đối với các hệ thống tệp mới hơn, có lẽ chúng ta sẽ không thấy phần mềm được cài đặt trên một khối exFAT, ngoài các ứng dụng di động, vì nó không có bảo mật, nhưng tôi sẽ không loại trừ ReFS. Người dùng cài đặt chương trình ở các vị trí không chuẩn vì lý do thuận tiện, không gian hoặc hiệu suất.
Eryk CN

7

Đối với cách đối phó với giới hạn kích thước đường dẫn trên Windows - sử dụng 7zip để đóng gói (và giải nén) các tệp nhạy cảm với độ dài đường dẫn của bạn có vẻ như là một cách giải quyết khả thi. Tôi đã sử dụng nó để vận chuyển một số cài đặt IDE (các đường dẫn plugin Eclipse, yike!) Và hàng đống tài liệu được tạo tự động và cho đến nay vẫn chưa có một vấn đề nào.

Không thực sự chắc chắn làm thế nào nó trốn tránh giới hạn 260 char được thiết lập bởi Windows (từ PoV kỹ thuật), nhưng này, nó hoạt động!

Thêm chi tiết trên trang SourceForge của họ ở đây :

"NTFS thực sự có thể hỗ trợ tên đường dẫn dài tới 32.000 ký tự."

7-zip cũng hỗ trợ tên dài như vậy.

Nhưng nó bị vô hiệu hóa trong mã SFX. Một số người dùng không thích những con đường dài, vì họ không hiểu cách làm việc với họ. Đó là lý do tại sao tôi đã vô hiệu hóa nó trong mã SFX.

phát hành ghi chú :

9,32 alpha 2013-12-01

  • Cải thiện hỗ trợ cho tên đường dẫn tệp dài hơn 260 ký tự.

4,44 beta 2007-01-20

  • 7-Zip hiện hỗ trợ tên đường dẫn tệp dài hơn 260 ký tự.

LƯU Ý QUAN TRỌNG: Để điều này hoạt động chính xác, bạn sẽ cần chỉ định đường dẫn đích trong hộp thoại "Trích xuất" 7zip , thay vì kéo và thả các tệp vào thư mục dự định. Nếu không, thư mục "Temp" sẽ được sử dụng làm bộ đệm tạm thời và bạn sẽ thoát vào cùng giới hạn 260 char sau khi Windows Explorer bắt đầu di chuyển các tệp đến "nơi an nghỉ cuối cùng" của chúng. Xem các câu trả lời cho câu hỏi này để biết thêm thông tin.


3
Tôi đã sai, 7zip và WinRAR giải nén tất cả các thư mục và tệp. Chỉ là thuộc tính của một thư mục trong Windows chỉ báo cáo số lượng thư mục và tệp không vi phạm giới hạn. Như thể Windows Explorer không đào sâu hơn để khám phá các thư mục khi đạt được đường dẫn tối đa.
Twisted Whisper

Có thể xóa một đường dẫn dài trong 7-zip bằng shift-del.
Laurie Stearn

Câu trả lời ngắn - sử dụng 7zip để giải nén tệp .zip .... hoạt động với tôi trên Windows 7
andrewcockerham


2

Một cách khác để đối phó với nó là sử dụng Cygwin, tùy thuộc vào những gì bạn muốn làm với các tệp (tức là nếu các lệnh Cygwin phù hợp với nhu cầu của bạn)

Ví dụ, nó cho phép sao chép, di chuyển hoặc đổi tên các tệp mà ngay cả Windows Explorer cũng không thể. Hoặc tất nhiên là đối phó với nội dung của chúng như md5sum, grep, gzip, v.v.

Ngoài ra, đối với các chương trình mà bạn đang mã hóa, bạn có thể liên kết chúng với Cygwin DLL và nó sẽ cho phép chúng sử dụng các đường dẫn dài (mặc dù tôi chưa thử nghiệm điều này)

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.