0

我有一个文本框。当我将文件拖入其中并单击按钮时,文本框中的文件将移动到另一个文件夹。但是,如果我忘记将文件拖到文本框并单击按钮,程序会抛出一个不存在 sourceFileName 的参数异常。

private void button_Click(object sender, EventArgs e)
{
    // here occurs Argument Exception Because there isn't any TextBox.Text
    File.Copy(TextBox.Text, "C:/");

    if (String.IsNullOrEmpty(TextBox.Text))
        {
            MessageBox.Show("Please drag a file to the Tex Box!");
        }
}

如何捕获缺少源文件的参数异常?

4

6 回答 6

3

检查string.IsNullOrEmpty之前File.Copy是否TextBox为空,然后return从事件中检查。

private void button_Click(object sender, EventArgs e)
{
    if (String.IsNullOrEmpty(TextBox.Text))
        {
            MessageBox.Show("Please drag a file to the Tex Box!");
            return; // return from the event
        }

    File.Copy(TextBox.Text, "C:/");
}

如果你使用它也会更好string.IsNullOrWhiteSpace,因为它会检查null,string.Empty和空格(仅当你使用 .Net 框架 4.0 或更高版本时)

于 2013-10-25T17:44:52.277 回答
2

但是如果我忘记将文件拖到文本框中

然后你需要在你的代码中做一些错误检查。如果可以在 UI 中单击按钮而不指定文件,则您的代码不能假定文件名会出现。(目前确实如此。)

在执行文件操作之前尝试检查条件:

if (!string.IsNullOrEmpty(TextBox.Text))
    File.Copy(TextBox.Text, "C:/");

甚至可以更进一步检查该值是否实际上是有效文件:

if (! string.IsNullOrEmpty(TextBox.Text))
    if (File.Exists(TextBox.Text))
        File.Copy(TextBox.Text, "C:/");

添加一些else条件以向用户显示适当的消息。相反,您可以禁用 UI 中的按钮,直到文本框有值为止。或者,你可以同时采用这两种方法。

(顺便TextBox说一句,对于变量来说,这不是一个特别好的名称。这是一个实际类的名称,并且可能与变量本身是同一个类。最好区分类名和变量实例名,尤其是如果您将永远在该类上使用静态方法。)

于 2013-10-25T17:47:08.827 回答
1

将您的String.IsNullOrEmpty陈述移到另一个陈述之前。

private void button_Click(object sender, EventArgs e)
{
    if (String.IsNullOrEmpty(TextBox.Text))
       MessageBox.Show("Please drag a file to the Tex Box!");
    else
       File.Copy(TextBox.Text, "C:/");  
}
于 2013-10-25T17:45:11.123 回答
1

为什么你做检查后?

if (String.IsNullOrEmpty(TextBox.Text))
    MessageBox.Show("Please drag a file to the Tex Box!");
else
    File.Copy(TextBox.Text, "C:/");

您只想在有效的情况下执行该操作。真的,您可能需要尝试/捕捉整个事情,因为可能会发生多个错误

于 2013-10-25T17:45:40.003 回答
1

我倾向于使用 File.Exists 来查看文件是否存在我喜欢在特殊情况下使用异常,但这是个人喜好

于 2013-10-25T17:46:03.950 回答
0
 if (File.Exists(TextBox.Text.Trim()))
  {
    File.Copy(TextBox.Text, "C:/");
  }
else
  {
    MessageBox.Show("Please drag a file to the Tex Box!");
    return;
  }
于 2013-10-25T17:53:02.927 回答