要超过c#中的最大路径限制,您显然需要在其开头将驱动器路径与@"\\?\"
连接起来。如果我这样做,那么我会在前面找到一个带有以下内容的驱动路径
\\\\?\\\\\\server\\share\\...
现在,如果我查找文件/文件夹,它将因路径中的非法字符集而失败(我假设?
),那么我如何采用微软网站上列出的方法(http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx)正确?
foreach (string filePath in Directory.GetFiles(folder))
{
String s = @"\\?\" + filePath;
if (filePath.Length > 255)
{
Console.WriteLine(filePath);
}
if (File.Exists(filePath))
{
FileInfo finfo = new FileInfo(s);
folderSize += finfo.Length;
}
}
foreach (string dir in Directory.GetDirectories(folder))
folderSize += GetDirectorySize(dir);
答案 0 :(得分:2)
答案 1 :(得分:1)
我认为你不应该在路径之前添加所有斜杠,我想你不明白MSDN中写的所有内容:
最大路径长度限制
在Windows API中(以下讨论了一些例外情况) 段落),路径的最大长度是MAX_PATH,即 定义为260个字符。本地路径的结构如下 顺序:驱动器号,冒号,反斜杠,名称组件分隔 反斜杠和终止空字符。例如, 驱动器D上的最大路径是“D:\某些256个字符的路径字符串” 其中“”表示不可见的终止空字符 当前的系统代码页。 (字符<>用于此处 视觉清晰度,不能成为有效路径字符串的一部分。)
注意: Windows API中的文件I / O函数将“/”转换为“\”作为一部分 将名称转换为NT样式的名称,除非使用 “\?\”前缀详见以下部分。
Windows API具有许多也具有Unicode版本的函数 允许一个扩展长度的路径,最大总路径长度为 32,767个字符。这种类型的路径由组件组成 用反斜杠分隔,每个都取决于返回的值 GetVolumeInformation的lpMaximumComponentLength参数 function(此值通常为255个字符)。指定一个 扩展长度路径,使用“\?\”前缀。例如,“\?\ D:\ very 漫长的道路“。
注意:最大路径为32,767个字符是近似值,因为 “\?\”前缀可以由系统扩展为更长的字符串 运行时间,此扩展适用于总长度。
你可以在那里看到:
Windows API具有许多也具有Unicode版本的函数 允许一个扩展长度的路径,最大总路径长度为 32,767个字符。
这是您的问题的关键,如果您需要创建或访问超过〜260个字符的路径,您应该使用特定的Windows API。