DirectoryNotFoundException - 找不到路径的一部分

时间:2016-01-24 16:44:44

标签: c#

我有一个我自己构建的控制台应用程序来重命名我下载的.mp3个文件。这个应用程序已经运行了好几个月,但突然间在我的一个特定目录中抛出了标题异常。它不仅仅是一个目录,而且仅在一定数量的文件上发生 - 其中3个已成功重命名。

这是我的目录路径和文件:

enter image description here

以下是抛出异常的目录路径的片段,以及异常消息:

enter image description here

这是我的代码:

static void Main(string[] args) {
    string dir = @"M:\Temp Downloading Folder";

    var files = new DirectoryInfo(dir + @"\Gregory Alan Isakov Discography [2005 - 2013]\Rust Colored Stones").GetFiles("*.mp3").ToList();

    foreach (var item in files) {
        if (item.Name.Substring(0, 2).All(char.IsDigit)) {
            //string fullName = item.FullName.Replace("\\", "/");
            string newName = "Gregory Alan Isakov ";
            //exception thrown here
            File.Move(item.FullName, item.FullName.Replace(item.Name.Substring(0, 3), newName));
        }
    }
    Console.WriteLine("Done!");
    Console.ReadKey();
}

我尝试将路径改为/而不是\\,结果相同。

根据Documentation on MSDN

  

当部分文件或目录不能时抛出的异常   被发现。

但是,找到目录 并正确地重命名前3个文件(如第一张图片所示)。

任何人都可以向我解释为什么会这样吗?

2 个答案:

答案 0 :(得分:4)

您的代码中有一个错误,它会更改文件夹而不是文件名,运行代码:

  

C:\ Temp下载文件夹\ Gregory Alan Isakov唱片目录[2005 -   2013] \ Rust Colored Stones \ 05 - Only Ghosts.mp3

更改为:

  

C:\ Temp下载文件夹\ Gregory Alan Isakov唱片目录[20 Gregory    Alan Isakov - 2013] \ Rust Colored Stones \ Gregory Alan Isakov - Only   Ghosts.mp3

我让你自己调试并修复它。

答案 1 :(得分:0)

问题可能是由于文件夹路径的长度造成的。缩短长度,然后再试一次。

Microsoft's documentation on file naming and path lengths提到Windows对路径的总长度加上它的文件名限制为260个字符;这被引用为最大路径长度限制,在此引用以便于参考:

  

在Windows API中(以下讨论了一些例外情况)   段落),路径的最大长度是MAX_PATH,即   定义为260个字符。本地路径的结构如下   顺序:驱动器号,冒号,反斜杠,名称组件分隔   反斜杠和终止空字符。例如,   驱动器D上的最大路径是" D:\某些256个字符的路径字符串"   在哪里""表示不可见的终止空字符   当前的系统代码页。 (字符<>用于此处   视觉清晰度,不能成为有效路径字符串的一部分。)

但是,如果您坚持按原样使用路径名,则可以通过在路径前加上" \?"来探索使用扩展长度路径名约定。符号

  

Windows API具有许多也具有Unicode版本的函数   允许一个扩展长度的路径,最大总路径长度为   32,767个字符。这种类型的路径由组件组成   用反斜杠分隔,每个都取决于返回的值   GetVolumeInformation的lpMaximumComponentLength参数   function(此值通常为255个字符)。指定一个   扩展长度路径,使用" \?\"字首。例如," \?\ D:\ very   漫长的道路"。