C#SaveFileDialog单击取消会抛出异常

时间:2016-07-12 13:40:21

标签: c#

我已经围绕这个问题探讨了可能的不同方法,但还没有找到解决这个问题的方法。

一切正常,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()))

这一行显示textResulttextbox它正在读取文本以保存到TXT文件

sw.Write(textResult.Text);

它抛出的例外是

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

"Additional information: Absolute path information is required"

2 个答案:

答案 0 :(得分:2)

在尝试使用StreamWriter之前,您需要验证用户是否实际点击了“保存”。 另外,你的条件:

  function createSVGUrl(svg) {
    var svgBlob = new Blob([svg], {type: 'image/svg+xml;charset=utf-8'});
    return DOMURL.createObjectURL(svgBlob);
  };

/**
   * Renders svg tile on the given context.
   * @param {CanvasRenderingContext2D} ctx
   * @param {SVGElement} svg The svg tile.
   * @param {{x: number, y:number}} pos The position to draw the svg tile on.
   * @throws Error
   */
  function renderSVGTile(ctx, svg, pos) {
    var img = new Image();
    var url = createSVGUrl(svg);
    img.onload = function() {
      try {
        ctx.drawImage(img, pos.x, pos.y);
        ctx.imageSmoothingEnabled = false;
        ctx.mozImageSmoothingEnabled = false;
        DOMURL.revokeObjectURL(url);
      } catch (e) {
        throw new Error('Could not render image' + e);
      }
    };
    img.src = url;
  };

将始终为true,因为您将FileName属性设置在其上方几行。

改为:

if(saveFileDialog1.FileName != "")

如果用户点击“保存”,它将返回true,如果用户点击“取消”,它将返回false,如果用户关闭该框,则结果将没有值。

更多信息:https://msdn.microsoft.com/en-us/library/dd491101(v=vs.95).aspx

答案 1 :(得分:0)

而不是if(saveFileDialog1.FileName != "") 试试

if(saveFileDialog1.DialogResult == DialogResult.OK

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