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

C# OpenFileDialog - exception when no files are chosen

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

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;
}

调用Splitter前需要检查FileName是否为空。您可以使用 String.IsNullOrWhiteSpace 在拆分器中,您可以使用 File.Exists 来查明文件是否存在。

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

你走在正确的轨道上。

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

所以你可以使用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});
    }
}