2013-02-19 28 views
5

Nguồn mở của tôi software đồng bộ thư mục từ xa với màn hình cục bộ. Thư mục từ xa có thể nằm trên Alfresco, nơi chiều dài đường dẫn không có giới hạn (/root/very/very/very/long/name.txt).Thư viện I/O C# hỗ trợ đường dẫn dài (để giải quyết PathTooLongException)

Khi phát triển ứng dụng tôi đã sử dụng System.IO.File.OpenWriteSystem.IO.Stream.Write, nhưng có vẻ như they don't support paths over a few hundred characters, vì vậy, người dùng báo cáo lỗi như PathTooLongException khi làm việc với đường dẫn dài.

UNC đường dẫn hoàn toàn phải tránh vì chúng dẫn đến không tương thích với một số ứng dụng.

Bạn nên sử dụng thư viện/mã nào trong trường hợp này?

Nó phải là mã nguồn mở C#.

+0

Tôi vừa nhận thấy bạn đã làm tính năng "đăng câu trả lời của riêng bạn". Tôi sẵn sàng đặt cược bạn, nơi đập đầu của bạn trong một thời gian figuring này ra và bây giờ bạn muốn chia sẻ về cách bạn giải quyết nó để những người khác không phải chịu đựng. [Tôi đã ở đó] (http://stackoverflow.com/q/11346554/80274). –

Trả lời

1

".NET 2.0 Workaround for PathTooLongException" (mã + bài viết).

Được cấp phép theo Dự án mã mở Giấy phép mở (CPOL), không phải là mã nguồn mở apparently.

Chỉ 2 cam kết không làm cho một dự án rất tích cực, mặc dù ...

+1

Ummm, nó không thực sự là một "dự án" của nó chỉ nói với bạn để sử dụng một PInvoke để gọi 'CreateFileW' và sử dụng' \\? \. 'Ở đầu tên đường dẫn của bạn. –

+0

Tôi lấy lại nó, tôi nhìn vào nguồn, anh ta đã đặt một số công việc vào nó. Tôi sẽ không lo lắng về phần "không quá tích cực".Bạn chỉ cần gói Windows API với một vài chức năng trợ giúp, một khi bạn đã loại bỏ các lỗi của bạn, không có nhiều hơn để làm –

1

Native File System Access

Kể từ khi phiên bản 185 (ngày 19 tháng 2 thứ, 2013), thư viện được bao phủ bởi Microsoft Public License (MS-PL), như được chỉ định trong tiêu đề của các tệp mã nguồn.

Có vẻ đầy hứa hẹn, nhưng tác giả advises không được sử dụng trong môi trường doanh nghiệp vì mã không đủ vững chắc.

Thư viện này có một số unit tests nhưng thiếu tài liệu.

+0

Liên kết bị hỏng –

+0

@ThomasLevesque: Cố định, cảm ơn cho tip! –

+0

Tôi không thể đề xuất thư viện này. Chức năng cơ bản, như 'File.Open' không hoạt động (xử lý xử lý của luồng nó trả về và bỏ qua tham số' access'/'share') và liệt kê tập tin âm thầm bỏ qua lỗi. – CodesInChaos

2

Bạn có thể thử số Base Class Libraries Long Path implementation. Nhưng lưu ý rằng không phải mọi thứ sẽ hoạt động nếu bạn bắt đầu trộn với các phương thức .NET I/O mặc định.

+0

Đây là giải pháp được khuyến nghị. 1 Đã sử dụng rộng rãi trước đây. Tôi nhớ lại một lỗi trong đó tại thời điểm phát hành ban đầu, nhưng đó là mã nguồn mở và tôi chắc chắn rằng nó đã được chính thức cố định. –

+0

+1 Tuyệt vời! Giấy phép là Microsoft Public License (Ms-PL) là mã nguồn mở, mặc dù nó không may là không tương thích với GNU-GPL: http://www.gnu.org/licenses/license-list.html#ms-pl –

1

Bạn có thể thử tách con đường lên bằng cách sử dụng đường dẫn tương đối như được nêu trong câu trả lời này sử dụng:

Directory.SetCurrentDirectory() 

PathTooLongException in C# code

+0

Thú vị ... có thể có một thư viện thực hiện thủ thuật này tự động cho tôi? –

3

AlphaFS phép bạn sử dụng đường dẫn rất dài (bằng cách sử dụng "\ \?" Phong cách) và bắt chước không gian tên System.IO.

Có thể bạn sẽ có thể sử dụng thư viện này giống như khi bạn đang sử dụng System.IO. Ví dụ, AlphaFS.Win32.Filesystem.File.Copy() thay vì System.IO.File.Copy().

(source)

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