FileNotFoundException但文件存在C# 命名空间备份 公共部分类Form1:Form { 公共表格1() { 初始化组件(); } 私有无效btn\u备份\u单击(对象发送方,事件参数e) { List SourceDir=this.lbox_Sources.Items.Cast().ToList(); 字符串TargetDir=this.tbox\u Target.Text; foreach(SourceDir中的DirectoryInfo目录) { foreach(目录.GetFiles()中的var文件) File.Copy(File.Name,Path.Combine(TargetDir,File.Name),true); } }

FileNotFoundException但文件存在C# 命名空间备份 公共部分类Form1:Form { 公共表格1() { 初始化组件(); } 私有无效btn\u备份\u单击(对象发送方,事件参数e) { List SourceDir=this.lbox_Sources.Items.Cast().ToList(); 字符串TargetDir=this.tbox\u Target.Text; foreach(SourceDir中的DirectoryInfo目录) { foreach(目录.GetFiles()中的var文件) File.Copy(File.Name,Path.Combine(TargetDir,File.Name),true); } },c#,backup,C#,Backup,当我尝试备份时,它会抛出一个异常,但该文件存在并且可以访问。编程不是很好,因此可能存在一些愚蠢的错误:p似乎需要修改文件。复制行: namespace Backup public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btn_Backup_Click(object sender, EventArgs e) {

当我尝试备份时,它会抛出一个异常,但该文件存在并且可以访问。编程不是很好,因此可能存在一些愚蠢的错误:p似乎需要修改
文件。复制
行:

namespace Backup

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void btn_Backup_Click(object sender, EventArgs e)
    {
        List<DirectoryInfo> SourceDir = this.lbox_Sources.Items.Cast<DirectoryInfo>().ToList();
        string TargetDir = this.tbox_Target.Text;

        foreach (DirectoryInfo directory in SourceDir)
        {
            foreach (var file in directory.GetFiles())
                File.Copy(file.Name, Path.Combine(TargetDir, file.Name), true);
        }
    }

我将第一个参数从
file.Name
更改为
file.FullName
-这将修复异常

将file.Name替换为file.Copy中的file.FullName

var targetPath = Path.Combine(TargetDir, file.Name)
File.Copy(file.FullName, targetPath , true);

在尝试备份时文件是否正在使用?另外,使用
file.Exist()
Breakpoints
时,您看到的确切例外情况是什么?还可以将
Path.Combine(TargetDir,file.Name)
存储在字符串变量中,以便更好地调试。尝试file.Exists(Path)检查文件是否存在并提供结果。否则,您可以尝试是否直接在代码中使用路径(而不是通过输入框)。this.lbox\u Sources.Items
@LeiYang
foreach(SourceDir中的DirectoryInfo目录)的内容是什么
那么为什么不使用
file.FullName
@LeiYang我同意,
file.FullName
在这里更好
foreach (var file in directory.GetFiles())
                File.Copy(file.FullName, Path.Combine(TargetDir, file.Name), true);