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

.NET MAUI Windows平台FileNotFoundException异常排查求助

.NET MAUI MVVM项目中FileNotFoundException(找不到SuspendedGame文件)的解决方法

问题背景

  • 基于MVVM架构开发.NET MAUI项目,在Resources\Raw目录下创建15.txt和19.txt文件,将生成操作设为MauiAsset,文件存储彩色编码矩阵拓扑信息
  • 预期目标:正常读取文件内容,不触发System.IO.FileNotFoundException,且读取方法可多次成功调用
  • 实际现象:
    • 未在Debug异常设置中勾选System.IO.FileNotFoundException时,文件内容可正常读取(页面矩阵图形显示正常),但调用方法时日志会出现该异常(无弹窗提示)
    • 勾选该异常后,应用无法正常启动
  • 排查结论:异常源于找不到C:\WINDOWS\system32\SuspendedGame文件,触发点为LoadAsync方法中的using (StreamReader reader = new StreamReader(path))行,且StoredGameBrowserModel类已存在跳过"SuspendedGame"文件的逻辑

原因分析

  1. MauiAsset文件读取方式错误:直接使用系统文件路径创建StreamReader读取Resources\Raw下的MauiAsset文件,这类文件是嵌入到应用程序集内的,无法通过物理路径直接访问
  2. 跳过逻辑执行时机滞后:StoredGameBrowserModel的跳过逻辑在尝试读取文件之后才执行,导致代码已经触发了文件不存在的异常

解决方案

1. 修正MauiAsset文件的读取方式

对于Resources\Raw下的MauiAsset文件,需使用.NET MAUI提供的FileSystem类读取,替换原有的StreamReader初始化代码:

// 读取15.txt示例
using var stream = await FileSystem.OpenAppPackageFileAsync("15.txt");
using var reader = new StreamReader(stream);
var fileContent = await reader.ReadToEndAsync();

2. 提前执行SuspendedGame文件的跳过逻辑

确保在尝试读取文件之前就判断文件名,避免触发异常:

// 在StoredGameBrowserModel的文件遍历逻辑中调整
foreach (var gameFile in gameFiles)
{
    if (gameFile.Name.Equals("SuspendedGame", StringComparison.OrdinalIgnoreCase))
    {
        continue; // 提前跳过,不执行后续读取操作
    }
    // 执行正常的文件读取流程
    await LoadAsync(gameFile);
}

3. 校验路径传入逻辑

检查LoadAsync方法接收的path参数,避免错误传入系统目录路径(如C:\WINDOWS\system32\)。对于MauiAsset文件,只需传入文件名即可,无需物理路径。

验证步骤

  1. 替换文件读取代码为上述正确方式
  2. 调整StoredGameBrowserModel的跳过逻辑至读取操作之前
  3. 勾选Debug异常设置中的System.IO.FileNotFoundException,启动应用验证是否不再触发异常
  4. 多次调用读取方法,确认文件内容正常加载且无异常日志输出

内容的提问来源于stack exchange,提问作者curiousMind_85

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:50:26