.NET 5.0中OpenFileDialog未弹出浏览窗口就抛FileNotFoundException如何解决
你遇到的异常是OpenFileDialog的InitialDirectory属性配置错误导致的:你直接赋值了字符串"Documents",系统会将其识别为程序运行目录下的相对路径,当对应目录不存在时,调用ShowDialog()就会抛出System.IO.FileNotFoundException。调试模式下调试器会拦截首次异常,系统内部也有目录 fallback 逻辑,因此点击继续可以正常执行,但独立运行时没有调试器的异常处理机制,就会直接终止程序。
解决方案
修正初始目录赋值
不要直接使用硬编码的"Documents"字符串,改用.NET提供的系统特殊目录读取API获取正确的文档目录绝对路径,修改Main.Designer.cs中对应代码为:this.m_OpenFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);修正Filter格式(可选,避免后续匹配问题)
现有Filter的|分隔符前后有多余空格,可能导致过滤规则解析异常,如果你要筛选固定名为descr_names.txt的文件,可以修改为:this.m_OpenFileDialog.Filter = "Names|descr_names.txt";如果你要筛选所有名称包含
descr_names.txt的文件,可修改为:this.m_OpenFileDialog.Filter = "Names|*descr_names.txt";确认项目基础配置
检查Program.cs入口代码是否包含WinForms必要的初始化配置,.NET 5+ WinForms项目默认会生成以下代码,不要手动删除:[STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Main()); }增加异常兜底(可选,提升稳定性)
可以在文件选择逻辑外层增加异常捕获,避免出现未处理异常直接导致程序退出:private void FileUploader_Click (Object sender, EventArgs e) { try { if (m_OpenFileDialog.ShowDialog() == DialogResult.OK) { // 后续处理选中文件的逻辑 } } catch (System.IO.FileNotFoundException ex) { MessageBox.Show($"打开文件选择器失败:{ex.Message}","错误",MessageBoxButtons.OK,MessageBoxIcon.Error); } }
内容的提问来源于stack exchange,提问作者Dagovax
相关产品推荐
相关产品推荐

