2012-06-13 39 views
5

Tôi đang chạy một chương trình rất đơn giản, đó là cố gắng để liệt kê các file trong một thư mục trên cùng một máy, được xác định bằng định dạng UNC (như mô tả trong http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx):Đường dẫn UNC không hoạt động với .NET?


static string rootDir = @"\\?\d:\share\input";

static void Main(string[] args) { char[] invlidChars = Path.GetInvalidPathChars(); foreach (char invChar in invlidChars) { if (rootDir.Contains(invChar.ToString())) { Console.WriteLine("InvChar - {0}", invChar); } } string[] matchFiles = Directory.GetFiles(rootDir); }

Tuy nhiên Directory.GetFiles() không hoạt động và ném một ArgumentException (được ném khi đường dẫn - là một chuỗi có độ dài bằng không, chỉ chứa khoảng trắng hoặc chứa một hoặc nhiều ký tự không hợp lệ như được định nghĩa bởi InvalidPathChars.). Console.Writeline() không in bất cứ thứ gì, xác nhận rằng không có ký tự không hợp lệ trong đường dẫn. Tôi nhận được cùng một ngoại lệ khi tôi sử dụng "\\ UNC \? \ D: \ share \ input" hoặc "\\ UNC \? \ Machinename \ share \ input" hoặc "\\? \ Machinename \ share \ input ".

"d: \ share \ input" thực sự là một thư mục được chia sẻ.

Có ai biết điều gì có thể sai không?

Cảm ơn!

+0

Tôi khuyên bạn nên xem tổng quan cũ nhưng vẫn có liên quan này về đường dẫn dài, giới hạn MAXPATH, \\? \ Prefix và các vấn đề .NET khác: http://blogs.msdn.com/b/bclteam/archive/2007/02/ 13/đường dài-trong-net-phần-1-of-3-kim-hamilton.aspx –

+0

Cảm ơn bạn đã liên kết Avner SK; Điều này làm rõ hành vi của .NET và Windows-API với các đường dẫn dài. – whywhywhy

Trả lời

8

Vấn đề là \\?\ là quy ước API cửa sổ không được NET hỗ trợ. Nếu bạn đọc một cách cẩn thận trong liên kết của bạn \\?\ không biểu thị một đường dẫn UNC, nhưng là một quy ước đặc biệt cho các cửa sổ API:

Đối với tập tin I/O, "\\?\" tiền tố vào một chuỗi con đường kể Windows API để vô hiệu hóa tất cả phân tích chuỗi và gửi chuỗi theo sau nó thẳng vào hệ thống tệp.

Định dạng UNC tương thích .NET sẽ là \\machinename\d$\share\input. Xem câu trả lời this để biết thêm thông tin.

Lý do nó không được .NET hỗ trợ. Nhiều khả năng quy ước đường dẫn mở rộng không có sẵn trên tất cả các nền tảng và do đó không thể đảm bảo hoạt động theo khuôn khổ.

+0

Cảm ơn bạn đã phản hồi Mike Z. Khi bạn chỉ ra thực sự \\? \ Không phải là một phần của UNC nhưng cửa sổ cụ thể. Điều này trả lời câu hỏi! – whywhywhy

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