C# 避免写入空文件时出现异常

C# 避免写入空文件时出现异常,c#,winforms,streamwriter,filedialog,C#,Winforms,Streamwriter,Filedialog,我正在做一些WPF练习,我可以成功地编写一个包含内容的文件 SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "Text file (*.txt)|*.txt"; sfd.ShowDialog(); using (StreamWriter sw = File.CreateText(sfd.FileName)) { sw.Write(container.Text); sw.Close(); } MessageBox.Show("

我正在做一些WPF练习,我可以成功地编写一个包含内容的文件

SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Text file (*.txt)|*.txt";
sfd.ShowDialog();
using (StreamWriter sw = File.CreateText(sfd.FileName))
{
  sw.Write(container.Text);
  sw.Close();
}
MessageBox.Show("File " + sfd.FileName + " created at " + DateTime.Now.ToString());
container.ResetText();
使用(StreamWriter)的
正在引发异常

如果我试图保存一个文件,但是在通知文件名之前关闭窗口,情况会变糟


我怎样才能避免呢?我尝试使用
语句检查文件是否为空(在
语句的上方和内部),但它仍然会关闭。

您需要检查ShowDialog的结果:

SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Text file (*.txt)|*.txt";
if (sfd.ShowDialog() == DialogResult.OK)
{
    File.WriteAllText(sfd.FileName, container.Text);
    MessageBox.Show("File " + sfd.FileName + " created at " + DateTime.Now.ToString());
    container.ResetText();
}

您需要检查ShowDialog的结果:

SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Text file (*.txt)|*.txt";
if (sfd.ShowDialog() == DialogResult.OK)
{
    File.WriteAllText(sfd.FileName, container.Text);
    MessageBox.Show("File " + sfd.FileName + " created at " + DateTime.Now.ToString());
    container.ResetText();
}

您需要检查ShowDialog的结果:

SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Text file (*.txt)|*.txt";
if (sfd.ShowDialog() == DialogResult.OK)
{
    File.WriteAllText(sfd.FileName, container.Text);
    MessageBox.Show("File " + sfd.FileName + " created at " + DateTime.Now.ToString());
    container.ResetText();
}

您需要检查ShowDialog的结果:

SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Text file (*.txt)|*.txt";
if (sfd.ShowDialog() == DialogResult.OK)
{
    File.WriteAllText(sfd.FileName, container.Text);
    MessageBox.Show("File " + sfd.FileName + " created at " + DateTime.Now.ToString());
    container.ResetText();
}


请定义
情况恶化
。阅读SaveFileDialog.FileName的文档。如果未选择任何文件,它将是一个空字符串,而不是null:。请定义
情况恶化
。阅读SaveFileDialog.FileName的文档。如果未选择任何文件,它将是一个空字符串,而不是null:。请定义
情况恶化
。阅读SaveFileDialog.FileName的文档。如果未选择任何文件,则它将是一个空字符串,而不是null:。请定义
出现问题的原因。
。阅读SaveFileDialog.FileName的文档。如果未选择任何文件,它将是一个空字符串,而不是null:。它表示运算符??无法应用于操作数。=/您是我们吗正在使用WPF SaveFileDialog(Microsoft.Win32.SaveFileDialog)或WinForms SaveFileDialog(System.Windows.Forms.SaveFileDialog)?如果您正在开发WPF应用程序,您应该使用WPF one,它将返回一个可为null的值,而??运算符会处理该值。您的问题表明您正在使用WPF(虽然我现在看到你已经用WinForms标记了这个问题——这让人困惑)我将用WinFrices解决方案更新我的答案。此外,考虑使用<代码>文件> WrreAldTys>代码>而不是<代码> StreamWriter <代码>。很抱歉“混乱”@ MichaelGunter!谢谢您的帮助。它说运算符不能应用于操作数。= /您使用WPF SaveFieldLax(微软?Win32?SaveFileDialog)或者WinForms SaveFileDialog(System.Windows.Forms.SaveFileDialog)?如果您正在开发一个WPF应用程序,那么您应该使用WPF one,它返回一个可为null的值,运算符可以使用该值。您的问题暗示您正在使用WPF(尽管我现在看到您已经用WinForms标记了这个问题,这很混乱)我将用WinFrices解决方案更新我的答案。此外,考虑使用<代码>文件> WrreAldTys>代码>而不是<代码> StreamWriter <代码>。很抱歉“混乱”@ MichaelGunter!谢谢您的帮助。它说运算符不能应用于操作数。= /您使用WPF SaveFieldLax(微软?Win32?SaveFileDialog)或者WinForms SaveFileDialog(System.Windows.Forms.SaveFileDialog)?如果您正在开发一个WPF应用程序,那么您应该使用WPF one,它返回一个可为null的值,运算符可以使用该值。您的问题暗示您正在使用WPF(尽管我现在看到您已经用WinForms标记了这个问题,这很混乱)我将用WinFrices解决方案更新我的答案。此外,考虑使用<代码>文件> WrreAldTys>代码>而不是<代码> StreamWriter <代码>。很抱歉“混乱”@ MichaelGunter!谢谢您的帮助。它说运算符不能应用于操作数。= /您使用WPF SaveFieldLax(微软?Win32?SaveFileDialog)或者WinForms SaveFileDialog(System.Windows.Forms.SaveFileDialog)?如果您正在开发一个WPF应用程序,那么您应该使用WPF one,它返回一个可为null的值,运算符可以使用该值。您的问题暗示您正在使用WPF(尽管我现在看到您已经用WinForms标记了这个问题,这很混乱)我将用WiFrices解决方案更新我的答案。此外,考虑使用<代码>文件> WrreAldTys>代码>而不是<代码> StreamWriter <代码>。很抱歉“混乱”@ MichaelGunter!谢谢您的帮助。