【发布时间】:2012-06-16 01:32:54
【问题描述】:
我正在运行一个非常简单的程序,它试图在同一台机器上的一个文件夹中列出文件,该文件使用 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”确实是一个共享文件夹。
有人知道哪里出了问题吗?
谢谢!
【问题讨论】:
-
我推荐这个旧的但仍然相关的长路径概述、MAXPATH 限制、\\?\ 前缀和其他 .NET 问题:blogs.msdn.com/b/bclteam/archive/2007/02/13/…
-
感谢 Avner S-K 的链接;这阐明了具有长路径的 .NET 和 Windows-API 的行为。
-
UNC:对于 UNC 路径,将“\\”替换为“\\?\UNC\”