我已经围绕这个问题探讨了可能的不同方法,但还没有找到解决这个问题的方法。
一切正常,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"
答案 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,它将关闭对话框,而无需进一步操作。