";找不到路径“”的一部分;复制文件时出错

本文关键字:复制 一部分 文件 出错 quot 找不到 路径 | 更新日期: 2023-09-27 17:58:27

我已经在互联网上搜索过了,但仍然没有找到解决方案。作为最后的尝试,我希望有人能给我一个确切的答案。

当我试图在文件资源管理器中将文件从一个目录复制到另一个目录时,我会遇到这个错误。它有一个用于浏览目录的树视图控件和一个用于显示目录内容的列表视图控件。这就是代码的样子,部分是:

private void copyToolStripMenuItem_Click(object sender, EventArgs e)
    {
        sourceDir = treeView1.SelectedNode.FullPath;
        for (int i = 0; i < listView1.SelectedItems.Count; ++i)
        {
            ListViewItem l = listView1.SelectedItems[i];
            toBeCopied[i] = l.Text; // string[] toBeCopied, the place where I save the file names I want to save
        }
    }

private void pasteToolStripMenuItem_Click(object sender, EventArgs e)
    {
        targetDir = treeView1.SelectedNode.FullPath;
        try
        {
            for (int i = 0; i < toBeCopied.Length; ++i)
            {
                File.Copy(sourceDir + "''" + toBeCopied[i], targetDir + "''" + toBeCopied[i], true);
                refreshToolStripMenuItem_Click(sender, e);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message + Environment.NewLine + ex.TargetSite);
        }
    }

我得到错误的地方是File.Copy(sourceDir + "''" + toBeCopied[i] ...

我读到它可能与设备的映射有关,但我真的不知道那是什么。

";找不到路径“”的一部分;复制文件时出错

你能看看MSDN上的Path.Combine方法吗?这将有助于确保你的整个路径没有多余的东西

Path.Combine(sourceDir, toBeCopied[i])

如果你仍然得到一个错误,让我知道如果上面的值。

文件名的目标路径是否存在?File.Copy()不会创建任何丢失的中间路径,您需要自己完成。使用调试器可以查看正在创建的源路径和目标路径,并确保源路径存在,目标路径至少存在于目标文件的父路径之前。

您不会显示toBeCopied的创建位置。看起来您可能已经超过了click事件中设置的值的末尾,并试图复制一堆名称为空的文件。

您应该将其添加到点击事件的开头

toBeCopied = new string[listView1.SelectedItems.Count];

同样(正如其他人所指出的),而不是

sourceDir + "''" + toBeCopied[i]

你应该使用

Path.Combine(sourceDir, toBeCopied[i])

假设sourceDirtargetDir都存在(您可以并且应该检查),您可能会加倍使用后面的'。构建路径时,应使用Path.Combine.

File.Copy(Path.Combine(sourceDir, toBeCopied[i]), Path.Combine(targetDir, toBeCopied[i]), true);

借用Henk的循环,但我会添加文件&目录检查,因为OP有问题的是需要检查/创建的未找到错误的路径。

for (int i = 0; i < toBeCopied.Length; ++i)
{
    string sourceFile = Path.Combine(sourceDir, toBeCopied[i]);
    if(File.Exists(sourceFile))
    { 
        string targetFile = Path.Combine(targetDir, toBeCopied[i]);
        if(!Directory.Exists(targetDir)) 
            Directory.CreateDirectory(targetDir); 
        File.Copy(sourceFile, targetFile, true);
    }
    refreshToolStripMenuItem_Click(sender, e)
}