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!
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 –
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