我有一个文本框。当我将文件拖入其中并单击按钮时,文本框中的文件将移动到另一个文件夹。但是,如果我忘记将文件拖到文本框并单击按钮,程序将抛出一个不存在sourceFileName的Argument异常。
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!");
}
}
如何捕获缺少源文件的参数异常?
答案 0 :(得分: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 framework 4.0或更高版本时)
答案 1 :(得分: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
对于变量来说并不是一个特别好的名称。这是实际类的名称,可能与变量本身相同的类。它是最好区分类名和变量实例名,特别是如果你打算在该类上使用静态方法。)
答案 2 :(得分: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:/");
}
答案 3 :(得分:1)
为什么你之后做检查?
if (String.IsNullOrEmpty(TextBox.Text))
MessageBox.Show("Please drag a file to the Tex Box!");
else
File.Copy(TextBox.Text, "C:/");
如果它有效,您只想执行该操作。真的,你可能需要尝试/捕捉整个事情,因为可能会发生多个错误
答案 4 :(得分:1)
我倾向于使用File.Exists来查看文件是否预先存在 我喜欢在特殊情况下使用例外,但这是个人偏好
答案 5 :(得分:0)
if (File.Exists(TextBox.Text.Trim()))
{
File.Copy(TextBox.Text, "C:/");
}
else
{
MessageBox.Show("Please drag a file to the Tex Box!");
return;
}