避免max char限制c#

时间:2011-09-22 10:18:23

标签: c# file-io

要超过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);

2 个答案:

答案 0 :(得分:2)

标准System.IO不支持长度超过260个字符的路径。

但似乎有一个具有扩展长度路径支持的库: http://alphafs.codeplex.com/

到目前为止,我个人还没有尝试过。

答案 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。