我已经在互联网上搜索了这个,仍然没有找到解决方案。作为一个终极尝试,我希望有人能给我一个确切的答案。
当我尝试在文件资源管理器中将文件从目录复制到另一个文件时,我遇到了这个错误。我正在尝试自己做。它有一个用于浏览目录的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);
}
}
我收到错误的地方是File.Copy(sourceDir + "\\" + toBeCopied[i] ...
。
我读过它可能与设备的映射有关,但我真的不知道那是什么。
答案 0 :(得分:5)
您可以查看MSDN上的Path.Combine方法吗?这将有助于确保您的整个路径都没有多余的路径。
即。 Path.Combine(sourceDir, toBeCopied[i])
如果您仍然收到错误,请告诉我上述内容的价值。
答案 1 :(得分:3)
您不会显示创建toBeCopied
的位置。看起来您可能已经超过了click事件中设置的值的末尾,并尝试复制一堆空名称的文件。
您应该将其添加到点击事件的开头
toBeCopied = new string[listView1.SelectedItems.Count];
另外(正如其他人所说)而不是
sourceDir + "\\" + toBeCopied[i]
你应该使用
Path.Combine(sourceDir, toBeCopied[i])
答案 2 :(得分:2)
目标路径是否存在文件名? File.Copy()
不会创建任何缺少的中间路径,您需要自己执行此操作。使用调试器查看您正在创建的源路径和目标路径,并确保源存在且目标至少存在于目标文件的父目录中。
答案 3 :(得分:1)
假设sourceDir
和targetDir
都存在(您可以并且检查),您可能会加倍追踪\
。构建路径时,应使用Path.Combine。
File.Copy(Path.Combine(sourceDir, toBeCopied[i]), Path.Combine(targetDir, toBeCopied[i]), true);
答案 4 :(得分:0)
借用Henk的循环,但我要添加文件&amp;目录检查,因为路径未找到错误需要检查/创建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)
}