8

我正在运行一个非常简单的程序,它试图在同一台机器上的一个文件夹中列出文件,该文件使用 UNC 格式指定(如http://msdn.microsoft.com/en-us/library/windows/中所述桌面/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”或“\\?\machinename\share\input”时,我得到了同样的异常。

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

有谁知道可能出了什么问题?

谢谢!

4

1 回答 1

9

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

对于文件 I/O,\\?\路径字符串的“”前缀告诉 Windows API 禁用所有字符串解析并将其后面的字符串直接发送到文件系统。

.NET 兼容的 UNC 格式将是\\machinename\d$\share\input. 有关更多信息,请参阅答案。

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

于 2012-06-13T06:41:57.787 回答