SaveFileDialog无法正常运行,寻求技术解决方案
SaveFileDialog功能问题修复
你的代码存在几个核心问题,导致无法正常运行:
- 功能逻辑颠倒:SaveFileDialog是用来选择保存路径和文件名的,不是用来读取文件的,你却用它执行读取操作,完全搞反了用途。
- 条件判断错误:用户通过SaveFileDialog选择的文件名可能是新建的(原本不存在),用
File.Exists(sfd.FileName)判断会直接跳过后续逻辑,根本无法执行保存操作。 - 对话框标题错误:标题写的是"Open Script",和SaveFileDialog的保存功能不匹配,容易造成混淆。
如果你的需求是把文本编辑器的内容保存到文件,修正后的代码如下:
const string FILTER_LUA = "Lua scripts (*.lua)|*.lua"; const string FILTER_TXT = "Text files (*.txt)|*.txt"; const string FILTER_ALL = "All files (*.*)|*.*"; SaveFileDialog sfd = new SaveFileDialog() { InitialDirectory = Environment.CurrentDirectory, Filter = $"{FILTER_LUA}|{FILTER_TXT}|{FILTER_ALL}", Title = "Save Script", // 可选:设置默认文件名或扩展名 DefaultExt = "lua", FileName = "new_script.lua" }; bool? result = sfd.ShowDialog(); if (result ?? false) { // 将文本编辑器内容写入选中的文件 File.WriteAllText(sfd.FileName, this.TextEditor.Text); }
如果你的需求其实是读取文件到文本编辑器,那应该用OpenFileDialog而非SaveFileDialog,修正后的代码如下:
const string FILTER_LUA = "Lua scripts (*.lua)|*.lua"; const string FILTER_TXT = "Text files (*.txt)|*.txt"; const string FILTER_ALL = "All files (*.*)|*.*"; OpenFileDialog ofd = new OpenFileDialog() { InitialDirectory = Environment.CurrentDirectory, Filter = $"{FILTER_LUA}|{FILTER_TXT}|{FILTER_ALL}", Title = "Open Script" }; bool? result = ofd.ShowDialog(); if ((result ?? false) && File.Exists(ofd.FileName)) { string fileText = File.ReadAllText(ofd.FileName); this.TextEditor.Text = fileText; }
内容的提问来源于stack exchange,提问作者Tim Joey
相关产品推荐
相关产品推荐

