2013-07-19 31 views
5

Để kiểm tra mục đích, tôi muốn tạo trên đĩa một thư mục vượt quá giới hạn Windows MAX_PATH. Tôi có thể làm như thế nào?Cách tạo thư mục vượt quá MAX_PATH

(Tôi đã thử Powershell, cmd, windows explorer => nó bị chặn.)

được sửa đổi: Việc sử dụng ZlpIOHelper từ thư viện ZetaLongPaths cho phép để làm điều đó trong khi lớp thư mục tiêu chuẩn ném ngoại lệ đáng sợ:

 static void Main(string[] args) 
    { 
     var path = @"d:\temp\"; 
     var dirName = "LooooooooooooooooooooooooooooooooooooooooooooongSubDirectory"; 
     while (path.Length <= 280) 
     { 
      path = Path.Combine(path, dirName); 
      ZlpIOHelper.CreateDirectory(path); //Directory.CreateDirectory(path); 
     } 
     Console.WriteLine(path); 
     Console.ReadLine(); 
    } 
+0

Trong C# hãy thử thư viện này: http://zetalongpaths.codeplex.com/....or nếu trong WIN32 thì bạn cần sử dụng tiền tố đặc biệt để cho phép tên tệp dài hơn. xem: http://msdn.microsoft.com/en-us/library/aa365247.aspx –

+1

Có một nhận xét trong một số phương pháp API mà bạn có thể sử dụng "\\? \" với các cuộc gọi Unicode làm tiền tố cho dài đường dẫn, nhưng tôi không biết liệu điều đó có chuyển thành công cụ dòng lệnh – Rup

Trả lời

12

Trong Win32 bạn cần sử dụng tiền tố "\\? \" đặc biệt để cho phép các tên tệp dài hơn.

Xem: http://msdn.microsoft.com/en-us/library/aa365247.aspx

Đối với tập tin I/O, "\\ \?" Tiền tố để một chuỗi đường dẫn kể về API của Windows để vô hiệu hóa tất cả các chuỗi phân tích cú pháp và gửi chuỗi sau nó thẳng vào hệ thống tệp. Ví dụ: nếu hệ thống tệp hỗ trợ các tên đường dẫn và tên tệp lớn, bạn có thể vượt quá giới hạn MAX_PATH được API Windows khác thi hành. Để biết thêm thông tin về về giới hạn đường dẫn tối đa bình thường, hãy xem Giới hạn chiều dài đường dẫn tối đa trước đó.

Khi bạn đang sử dụng C#, hãy thử thư viện này sẽ giúp bạn lưu tất cả các PInvokes vào API tệp WIN32 và thêm tiền tố vào đường dẫn.

1

Làm thế nào về một cái gì đó như thế này:

var path = "C:\\"; 
while (path.Length <= 260) 
{ 
    path = Path.Combine(path, "Another Sub Directory"); 
} 
+1

không, bạn đánh bại tôi với nó +1 – Sayse

+1

Tôi cho rằng anh ta có nghĩa là "tạo trên đĩa"? – Rup

+0

Chỉ cần thêm thư mục tạo từ nhận xét của tôi và ở đó bạn có nó – Sayse

1

Giải pháp đơn giản nhất là để tạo ra một thư mục c:\A\averylongnamethatgoesonandonandon..., và sau đó đổi tên C:\A một cái gì đó lâu hơn nữa. Windows không kiểm tra mọi trẻ em của A để xem tên của đứa trẻ đó có vượt quá MAX_PATH hay không.

+1

Bạn sẽ không đổi tên thư mục hiện có thành tên ngắn, sau đó tạo một phụ dài -directory và sau đó đổi tên nó trở lại. Không, không phải là một giải pháp tốt. Ngoài ra, bạn không thể làm điều đó nếu các tập tin của 'A' đang được sử dụng. –

Các vấn đề liên quan