UNC路径不适用于.NET?

时间:2012-06-13 05:59:16

标签: c# .net windows disk-io

我正在运行一个非常简单的程序,它试图在同一台机器上的文件夹中列出文件,该文件使用UNC格式指定(如http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx中所述):


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(当 - path是零长度字符串,仅包含空格或包含由InvalidPathChars定义的一个或多个无效字符时抛出) 的)。 Console.Writeline()不会打印任何内容,这确认路径中没有无效的字符。我使用时会遇到同样的异常 “\\ UNC \?\ d:\ share \ input”或 “\\ UNC \?\ machinename \ share \ input”或 “\\?\计算机名\共享\输入”。

“d:\ share \ input”确实是一个共享文件夹。

有人知道可能出现什么问题吗?

谢谢!

1 个答案:

答案 0 :(得分:8)

问题是\\?\是.NET不支持的Windows API约定。如果您仔细阅读链接\\?\并不表示UNC路径,但是Windows API的特殊约定:

  

对于文件I / O," \\?\"路径字符串的前缀告诉Windows   用于禁用所有字符串解析并发送后续字符串的API   它直接进入文件系统。

.NET兼容的UNC格式为\\machinename\d$\share\input。有关详细信息,请参阅this答案。

.NET不支持它的原因很可能是扩展路径约定并非在所有平台上都可用,因此不能保证框架能够使用它。