C# UNC路径不适用于.NET?
我正在运行一个非常简单的程序,该程序试图列出同一台计算机上文件夹中的文件,该文件夹使用UNC格式指定(如中所述):C# UNC路径不适用于.NET?,c#,.net,windows,disk-io,C#,.net,Windows,Disk Io,我正在运行一个非常简单的程序,该程序试图列出同一台计算机上文件夹中的文件,该文件夹使用UNC格式指定(如中所述): 静态字符串rootDir=@“\\?\d:\share\input” 静态void Main(字符串[]参数) { char[]invlidChars=Path.GetInvalidPathChars(); foreach(invlidChars中的char invChar) { if(rootDir.Contains(invChar.ToString())) { WriteLi
静态字符串rootDir=@“\\?\d:\share\input”
静态void Main(字符串[]参数)
{
char[]invlidChars=Path.GetInvalidPathChars();
foreach(invlidChars中的char invChar)
{
if(rootDir.Contains(invChar.ToString()))
{
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”实际上是一个共享文件夹
有人知道会出什么问题吗
谢谢 问题在于,
\\?\
是一种windows API约定,不受.NET支持。如果仔细阅读链接\\?\
,则该链接并不表示UNC路径,而是windows API的特殊约定:
对于文件I/O,路径字符串的“\\?\
”前缀告诉Windows
API来禁用所有字符串解析并发送后面的字符串
它直接进入文件系统
与.NET兼容的UNC格式应为\\machinename\d$\share\input
。有关更多信息,请参阅答案
.NET不支持它的原因很可能是扩展路径约定在所有平台上都不可用,因此无法保证框架能够正常工作。我推荐这篇关于长路径、MAXPATH限制、\\?\prefix和其他.NET问题的古老但仍然相关的概述:感谢链接Avner S-K;这澄清了具有长路径的.NET和Windows API的行为。UNC:将UNC路径的“\\”替换为“\\?\UNC\”。正如您所指出的,确实\\?\不是UNC的一部分,而是特定于Windows的。这就回答了问题!是的,有更多的细节。我添加了一个关于UNC路径和测试的部分。
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);
}