【问题标题】:"Could not find a part of the path" error message“找不到路径的一部分”错误消息
【发布时间】:2022-02-11 12:49:28
【问题描述】:

我正在用 c# 编程,想从闪存盘复制一个包含子文件夹的文件夹以启动。

这是我的代码:

private void copyBat()
{
    try
    {
        string source_dir = "E:\\Debug\\VipBat";
        string destination_dir = "C:\\Users\\pc\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup";

        if (!System.IO.Directory.Exists(destination_dir))
        {
            System.IO.Directory.CreateDirectory(destination_dir);
        }       

        // Create subdirectory structure in destination    
        foreach (string dir in Directory.GetDirectories(source_dir, "*", System.IO.SearchOption.AllDirectories))
        {
            Directory.CreateDirectory(destination_dir + dir.Substring(source_dir.Length));          
        }

        foreach (string file_name in Directory.GetFiles(source_dir, "*.*", System.IO.SearchOption.AllDirectories))
        {
            File.Copy(file_name, destination_dir + file_name.Substring(source_dir.Length), true);
        }
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message, "HATA", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    }
}

我收到一个错误:

找不到路径 E:\Debug\VipBat 的一部分

【问题讨论】:

  • 您正在使用逐字字符串文字 @"" 在这种情况下您不需要转义 `\` - 只需使用一个斜杠即可。
  • @StuartLC 是对的。如果您使用逐字字符串文字,您的字符串将与您所写的完全一样。在这种情况下,它将恰好是 E:\\Debug\\VipBat\\ 这不是一个有效的路径。
  • 您不应该在E:\\Debug\\VipBat\\{0} 中填写{0} 吗?另一件事是,当您在字符串前面加上 @ 前缀时,路径中不需要两个斜杠。
  • 欢迎来到 Stack Overflow!请不要包含有关问题标题中使用的语言的信息,除非没有它就没有意义。标记用于此目的。
  • 我没有使用@,我确信路径是正确的,但我得到了同样的错误。代码更新了...

标签: c# file-io


【解决方案1】:

错误是不言自明的。您尝试访问的路径不存在。

string source_dir = "E:\\Debug\\VipBat\\{0}";

我确定这不是正确的路径。 Debug 文件夹直接在 E: 驱动器对我来说看起来不对。我想必须存在项目名称文件夹目录。

第二件事;你的字符串中的{0} 是什么。我确信它是一个参数占位符,因为文件夹名称不能包含 {0} 这样的名称。所以需要用String.Format()来替换实际值。

string source_dir = String.Format("E:\\Debug\\VipBat\\{0}",variableName);

但首先检查您尝试访问的路径是否存在。

【讨论】:

  • 使用 Path.combine()
  • 错误不是不言自明的。不存在的路径不是“路径的一部分”
  • @tno2007 找不到不存在的部分!
【解决方案2】:

出了点问题。你写过:

string source_dir = @"E:\\Debug\\VipBat\\{0}";

错误是

找不到路径 E\Debug\VCCSBat 的一部分

这不是同一个目录。

你的代码有问题,你必须使用:

string source_dir = @"E:\Debug\VipBat"; // remove {0} and the \\ if using @

string source_dir = "E:\\Debug\\VipBat"; // remove {0} and the @ if using \\

【讨论】:

    【解决方案3】:

    驱动器 E 是映射驱动器吗?然后,它可以由用户帐户以外的另一个帐户创建。这可能是错误的原因。

    【讨论】:

    • 这和特权有关系吗?有趣的是,我以管理员身份打开了 Visual Studio,代码停止工作并抱怨“找不到路径的一部分”。这没有任何意义。
    • 如果访问此路径的用户是 Active Directory 用户,则可能会生成此错误。
    【解决方案4】:

    可能不相关,但请考虑使用Path.Combine 而不是destination_dir + dir.Substring(...)。从外观上看,您的 .Substring() 会在开始时留下强烈反对,但是像 Path 这样的辅助类是有原因的。

    【讨论】:

      【解决方案5】:

      我遇到了同样的错误,但在我的情况下,问题在于 DESTINATION 路径的格式。上面的 cmets 在调试路径字符串格式方面是正确的,但是 File.Copy 异常报告中似乎存在一个错误,它仍然会返回 SOURCE 路径而不是 DESTINATION 路径。所以别忘了也看这里。

      -TC

      【讨论】:

        【解决方案6】:

        此错误可能有以下两个原因之一:

        1. 路径不正确 - 但 CreateDirectory 不太可能创建任何路径,除非路径本身无效,读取无效字符
        2. 运行您的应用程序的帐户无权在路径位置创建目录,例如您尝试在没有足够权限的共享驱动器上创建目录等

        【讨论】:

        • 在我的情况下,我不拥有的网络文件夹上的安全设置没有为服务用户提供足够的权限,因此它可以访问该文件。如果错误消息中包含为什么访问失败而不是让我们猜测,那就太好了。该异常甚至没有内部异常来辅助调试。
        【解决方案7】:
        File.Copy(file_name, destination_dir + file_name.Substring(source_dir.Length), true);
        

        此行有错误,因为预期的代码是directory name + file name,而不是文件名。

        这是正确的

        File.Copy(source_dir + file_name, destination_dir + file_name.Substring(source_dir.Length), true);
        

        【讨论】:

          【解决方案8】:

          我通过使用管理员权限重新启动 Visual Studio 解决了类似的问题。

          问题是因为它无法在没有提升访问权限的情况下打开一个与 Sharepoint 相关的项目。

          【讨论】:

            【解决方案9】:

            这也可能是问题:文件夹名称中有空格

            示例: 让它成为你的路径: string source_dir = @"E:\Debug\VipBat";

            如果您尝试访问此位置而不尝试检查目录是否存在,并且以防目录末尾有空格,例如: “VipBat    ”,而不仅仅是 “VipBat”,当您在文件资源管理器中看到时,末尾的空格将不可见。

            因此,请确保您获得了正确的文件夹名称,并且不要在文件夹名称中添加空格。最佳做法是在将文件保存在那里之前检查文件夹是否存在。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-03-02
              • 1970-01-01
              • 2017-01-06
              • 1970-01-01
              • 2017-09-10
              • 1970-01-01
              • 2019-09-11
              相关资源
              最近更新 更多