我運行一個非常簡單的程序,這是試圖列出在同一臺機器,這是使用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