【问题标题】:Could not find the part of the path, but it exists找不到路径的一部分,但它存在
【发布时间】:2018-09-19 11:03:52
【问题描述】:

我创建了一个返回文件夹大小的方法。

public static long GetDirectorySize(DirectoryInfo d)
    {
        long size = 0;
        // Add file sizes.
        FileInfo[] fis = d.GetFiles();
        foreach (FileInfo fi in fis)
        {
            size += fi.Length;
        }
        // Add subdirectory sizes.
        DirectoryInfo[] dis = d.GetDirectories();
        foreach (DirectoryInfo di in dis)
        {
            size += GetDirectorySize(di);
        }
        return size;
    }

它适用于通常的路径,但对于(),它会抛出一个error: 找不到路径的一部分 path in cmd

【问题讨论】:

  • “常用路径”是指 ascii 路径?
  • 正确,是的,它的意思是 ascii
  • 路径不对。与问题中的书写不匹配
  • 截图中的路径是 260 个字符 ==> 太长了!此外,开头“C:_VSource\VisoftApplication\bin\x64\Debug\”表示您可能传递了相对路径而不是绝对路径,这意味着 VS 将其拼凑成一个不存在的路径。
  • 好的,cmd截图显示它可能确实存在。路还是太长了。根据文件名的长度,这很可能会破坏一切。

标签: c# .net


【解决方案1】:

Windows API 有许多函数,它们也有 Unicode 版本,以允许最大总路径长度为 32,767 个字符的扩展长度路径。这种类型的路径由用反斜杠分隔的组件组成,每个组件的最大长度为 GetVolumeInformation 函数的 lpMaximumComponentLength 参数中返回的值(该值通常为 255 个字符)。要指定扩展长度的路径,请使用 \?\ 前缀。例如,\?\D:\很长的路径。

下面的帖子很好地讨论了您的主题:

How to deal with files with a name longer than 259 characters?

【讨论】:

    【解决方案2】:

    我试图模仿你的问题:

    string path = "C:\\_VSource\\VisoftApplication\\bin\\x64\\Debug\\Projekte\\Temporary\\KRUG_PETRA_WILFRIED_2\\Data\\TextureImages\\Custom\\Sanitärobjekte\\_textures\\wc-vorwand 2,025 mit nische\\Standard\\sanitary\\visoft_dekoration515\\sanitary\\visoft_dekoration515\\visoft_dekoration\\textures";
    
    if (!Directory.Exists(path))
        Directory.CreateDirectory(path); // received an error here
    

    错误是这个:

    指定的路径、文件名或两者都太长。完全 限定文件名必须少于 260 个字符,并且 目录名称必须少于 248 个字符。

    您可以在此处查看适用于长路径的 .Net 库 Zeta Long Paths

    【讨论】:

      猜你喜欢
      • 2021-03-16
      • 1970-01-01
      • 2013-01-13
      • 2013-05-20
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      相关资源
      最近更新 更多