C#OpenFileDialog - 未选择文件时的异常

时间:2015-05-15 11:03:51

标签: c# wpf exception null openfiledialog

我正在努力解决这个错误,当没有选择文件时,程序显然会去做下一步,尽管它不应该。我试过了:

if (fileToCheck != null)

但它没有用。还有其他建议吗?

private void Mail(object sender, RoutedEventArgs e)
{
    OpenFileDialog openFileDialog = new OpenFileDialog();
    openFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";

    if (openFileDialog.ShowDialog() == true)
    {
            spamText.Text = File.ReadAllText(openFileDialog.FileName);               
    }


    string[] fileToCheck = { openFileDialog.FileName };

    Splitter(fileToCheck);
    mail = tempDict;
}

2 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。

但是检查if (fileToCheck != null)是不够的,因为当没有选择文件时,openFileDialog.FileName包含空字符串,而不是空。

所以你可以使用if (!String.IsNullOrEmpty(fileToCheck))检查。

另一种方法 - 只需将fileToCheck周围的代码置于openFileDialog.ShowDialog() == true条件之内。它看起来更符合逻辑,因为如果未选择文件,则不会触及此条件,您也不需要继续进行额外检查。

所以你的代码看起来像

if (openFileDialog.ShowDialog() == true)
{
    string fileName = openFileDialog.FileName;
    if (!string.IsNullOrEmpty(fileName) && File.Exists(fileName))
    {
        spamText.Text = File.ReadAllText(fileName);               
        Splitter(new [] {fileName});
    }
}

答案 1 :(得分:1)

在致电FileName之前,您需要检查Splitter是否为空。您可以使用String.IsNullOrWhiteSpace在Splitter中,您可以使用File.Exists查找文件是否存在。

if(!String.IsNullOrWhiteSpace(fileToCheck))
{
    string[] fileToCheck = { openFileDialog.FileName };
    Splitter(fileToCheck);
    mail = tempDict;
}
else
{
    //Do something
}