我运行一个非常简单的程序,这是试图列出在同一台机器,这是使用UNC格式(如http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx描述)指定的文件夹中的文件:UNC路径不适用于.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);
}
然而Directory.GetFiles()不起作用并抛出一个ArgumentException(当 - 路径为零长度字符串,仅包含空格或包含InvalidPathChars定义的一个或多个无效字符时引发此异常。)。 Console.Writeline()不打印任何内容,确认路径中没有无效字符。当我使用 “\\ UNC \?\ d:\ share \ input”或 “\\ UNC \?\ machinename \ share \ input”或 “\\?\ machinename \ share \ input ”。
“d:\ share \ input”确实是一个共享文件夹。
有人知道什么可能是错的吗?
谢谢!
我推荐这个旧的但仍然相关的长路径概述,MAXPATH限制,\\?\前缀和其他.NET问题:http://blogs.msdn.com/b/bclteam/archive/2007/02/ 13/long-paths-in-net-part-1-of-3-kim-hamilton.aspx –
感谢链接Avner SK;这阐明了长路径的.NET和Windows-API的行为。 – whywhywhy