SaveFileDialog仅获取保存路径而不执行文件写入。需先判断ShowDialog()返回值是否为DialogResult.OK,再用File.WriteAllText等手动写入;设置Filter、InitialDirectory、FileName可定制对话框行为,OverwritePrompt=true启用覆盖提示,但文件存在检查与重命名需自行实现。
SaveFileDialog 基本用法
直接创建 SaveFileDialog 实例,调用 ShowDialog() 弹出窗口,用户确认后通过 FileName 获取选中的路径。关键点是:它不自动保存文件,只负责获取路径。
- 必须检查返回值是否为
DialogResult.OK,否则用户点了取消或关闭,FileName可能为空或无效 -
Filter属性决定下拉列表中显示的文件类型,格式为"显示名|*.扩展名",例如"文本文件|*.txt|所有文件|*.*" - 设置
InitialDirectory可指定默认打开位置,不设则通常为上次访问目录或系统文档目录 - 设置
FileName初始值可预填文件名(不含路径),比如dialog.FileName = "report.txt";
常见错误:点了保存但文件没写入
这是最常被忽略的一点:SaveFileDialog 本身不做任何 I/O 操作。弹窗只是帮你拿到路径字符串,后续得自己用 File.WriteAllText、FileStream 等写入内容。
- 错误写法:
dialog.ShowDialog(); File.WriteAllText(dialog.FileName, content);—— 没判断是否点了 OK,可能对空字符串写入导致异常 - 正确顺序:先
if (dialog.ShowDialog() == DialogResult.OK),再执行写入逻辑 - 注意权限问题:用户选了系统受保护路径(如
C:\Windows),写入会抛UnauthorizedAccessException,应捕获并提示
避免覆盖已有文件的提示
默认情况下,SaveFileDialog 不会阻止用户输入已存在文件名。要启用“文件已存在时询问”功能,需设置 OverwritePrompt = true。