C# &引用;找不到路径的一部分“;复制文件时出错

C# &引用;找不到路径的一部分“;复制文件时出错,c#,path,file-copying,C#,Path,File Copying,我已经在互联网上搜索过这个问题,但仍然没有找到解决方案。作为最终的尝试,我希望有人能给我一个确切的答案 当我试图在一个文件资源管理器中将一个文件从一个目录复制到另一个目录时,我会遇到这个错误。它有一个用于浏览目录的treeview控件和一个用于显示目录内容的listview控件。部分代码如下所示: private void copyToolStripMenuItem_Click(object sender, EventArgs e) { sourceDir = treeV

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

当我试图在一个文件资源管理器中将一个文件从一个目录复制到另一个目录时,我会遇到这个错误。它有一个用于浏览目录的treeview控件和一个用于显示目录内容的listview控件。部分代码如下所示:

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);
        }
    }
private void copyToolStripMenuItem\u单击(对象发送方,事件参数e)
{
sourceDir=treeView1.SelectedNode.FullPath;
对于(int i=0;i
我得到错误的地方是
File.Copy(sourceDir+“\\”+toBeCopied[I]…


我已经读过,这可能与设备映射有关,但我真的不知道这是什么。

假设
sourceDir
targetDir
都存在(您可以并且应该检查),您可能会将尾部的
\
加倍。在构建路径时,您应该使用


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

i、 e.
Path.Combine(sourceDir,toBeCopied[i])


如果仍然出现错误,请让我知道如果出现上述错误,值是多少。

您没有显示要复制的
文件的创建位置。
。看起来您可能正在运行单击事件中设置的值的末尾,并试图复制一组名称为空的文件

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

toBeCopied = new string[listView1.SelectedItems.Count];
也(正如其他人所指出的)代替了

sourceDir + "\\" + toBeCopied[i]
你应该使用

Path.Combine(sourceDir, toBeCopied[i])

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

借用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)
}
for(int i=0;i
您收到一个异常,表明File.Copy调用中使用的路径可能有问题。也许值得检查传递到File.Copy的字符串。例如,您可以声明一个本地字符串变量,在该字符串中组合路径,然后将其传递到File.Copy。现在您还可以检查传递到File.Copy的字符串在调试器中,将其传递给WriteLine,从System.Debug等传递给某个对象。您是对的。从您的帖子和其他一些帖子中,我设法发现
toBeCopied
的边界已设置且大于所选项,因此函数采用了空参数。我对其进行了如下编辑:
toBeCopied=new string[列表视图1.SelectedItems.Count];
就是这么简单。谢谢!
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)
}