0

我在 wpf 上使用 c# 并遇到了一个问题,我选择了一些文件,它们的文件名进入了我的“filespicked”文本框。然后,我有一个按钮,应该将文件(与在文本框中选择的文件相同)复制到另一个文件夹。此按钮打开文件夹浏览器对话框,我选择要复制到的文件夹。

问题是当我选择文件夹并单击确定时,我的 try/catch 异常处理程序捕获了一个异常,并且它不会复制。

这是我的代码。

private void Button_Click(object sender, RoutedEventArgs e)

    {
        FolderBrowserDialog dialog = new FolderBrowserDialog();
        dialog.Description = "Select a folder to copy to";
        dialog.ShowNewFolderButton = true;

        if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {

            string[] files = filePickedTextBox.Text.Split('\n');

            foreach (var file in files)
            {
                // Detect and handle the event of a non-valid filename
                try
                {
                    File.Copy(file, dialog.SelectedPath);
                }
                catch (Exception ex)
                {
                    outputTextBox.Text = ex.ToString();
                    return;
                }
            }
        }

这是错误:

System.IO.IOException:目标文件“C:\Users\tj\Desktop\copied_files”是一个目录,而不是一个文件。在 System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite, Boolean checkHost) at System.IO.File.Copy(String sourceFileName, String destFileName) at WpfApp1.MainWindow.Button_Click(Object sender, RoutedEventArgs e)

该错误对我来说毫无意义,因为文件变量中的字符串是目标文件,而不是copyed_files 文件夹。那是目标文件夹。

4

1 回答 1

2

复制目标必须是文件,而不是目录(因此是“目标文件...”)。如果要保留相同的文件名,请使用 Path.Combine 将文件名附加到 dialog.SelectedPath 上:

foreach (var file in files)
{
    // Detect and handle the event of a non-valid filename
    try
    {
        File.Copy(file, Path.Combine(dialog.SelectedPath, Path.GetFileName(file)));
    }
    catch (Exception ex)
    {
        outputTextBox.Text = ex.ToString();
        return;
    }
}
于 2021-05-26T18:27:29.353 回答