C#保存文件对话框单击取消会引发异常

C#保存文件对话框单击取消会引发异常,c#,C#,我已经研究过这个问题可能的不同解决方法,但还没有找到解决这个问题的方法 一切正常,弹出SaveFileDialog框,您可以单击“保存无问题”,如果单击“取消”,则会引发异常 我的代码如下: private void createNewFile_Click(object sender, RoutedEventArgs e) { Microsoft.Win32.SaveFileDialog saveFileDialog1 = new Microsoft.Win32.SaveFileDial

我已经研究过这个问题可能的不同解决方法,但还没有找到解决这个问题的方法

一切正常,弹出
SaveFileDialog
框,您可以单击“保存无问题”,如果单击“取消”,则会引发异常

我的代码如下:

private void createNewFile_Click(object sender, RoutedEventArgs e)
{
    Microsoft.Win32.SaveFileDialog saveFileDialog1 = new Microsoft.Win32.SaveFileDialog();
    saveFileDialog1.FileName = "New Note"; //default file name
    saveFileDialog1.DefaultExt = ".txt"; //default file extension
    saveFileDialog1.Filter = "Text Files (.txt)|*.txt"; //filter files by extension
    saveFileDialog1.ShowDialog(); //bring up the Dialog box

    if(saveFileDialog1.FileName != "")
    {
        using (StreamWriter sw = new StreamWriter(saveFileDialog1.OpenFile()))
        {
            sw.Write(textResult.Text);
        }
    }

}
它抛出错误的行是:

 using (StreamWriter sw = new StreamWriter(saveFileDialog1.OpenFile()))
显示
textResult
的这一行是
textbox
它从中读取要保存到TXT文件的文本

sw.Write(textResult.Text);
它抛出的异常是

"An unhandled exception of type 'System.ArgumentException' occured in mscorlib.dll"

"Additional information: Absolute path information is required"

在尝试使用StreamWriter之前,您需要验证用户是否确实单击了“保存”。 此外,您的情况:

if(saveFileDialog1.FileName != "")
当您仅在文件名属性上方几行设置文件名属性时,将始终为true

改为:

var result = saveFileDialog1.ShowDialog();

if(result.HasValue && result.Value)
如果用户单击“保存”,则返回true;如果用户单击“取消”,则返回false;如果用户关闭框,则结果将没有值


更多信息:

在尝试使用StreamWriter之前,您需要验证用户是否确实单击了“保存”。 此外,您的情况:

if(saveFileDialog1.FileName != "")
当您仅在文件名属性上方几行设置文件名属性时,将始终为true

改为:

var result = saveFileDialog1.ShowDialog();

if(result.HasValue && result.Value)
如果用户单击“保存”,则返回true;如果用户单击“取消”,则返回false;如果用户关闭框,则结果将没有值

更多信息:

而不是
if(saveFileDialog1.FileName!=“”)
试一试

if(saveFileDialog1.DialogResult==DialogResult.OK

在这种情况下,如果单击“保存”,它将进入streamwriter;如果单击“取消”,它将关闭对话框,而无需进一步操作

而不是
if(saveFileDialog1.FileName!=“”)
试一试

if(saveFileDialog1.DialogResult==DialogResult.OK


在这种情况下,如果单击“保存”,它将进入streamwriter;如果单击“取消”,它将关闭对话框,而无需进一步操作

异常是什么?测试
ShowDialog
结果而不是文件名:
if(saveFileDialog1.ShowDialog()==true){使用(…)…}
异常是什么?测试
ShowDialog
结果而不是文件名:
if(saveFileDialog1.ShowDialog()==true){使用(…)…}
这不会编译,因为结果是
bool?
,而不是
bool
。当用户通过系统菜单关闭对话框时,结果是
null
。这是否意味着我需要删除saveFileDialog1.ShowDialog();从上面的一位开始?@LukeLitherland请查看我的最新编辑,将ShowDialog的当前行替换为:var result=saveFileDialog1.ShowDialog();这不会编译,因为结果是
bool?
,而不是
bool
。当用户通过系统菜单关闭对话框时,结果是
null
。这是否意味着我需要删除saveFileDialog1.ShowDialog();从上面的一位开始?@LukeLitherland请查看我的最新编辑,将ShowDialog的当前行替换为:var result=saveFileDialog1.ShowDialog();