You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:45:06