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

.NET MAUI修改JSON文件遇FileNotFoundException问题求助

.NET MAUI读写JSON文件路径不一致问题

我正在做一个学校项目,用.NET MAUI开发应用,想从MAUI的raw文件夹读取JSON文件、修改值后更新文件。读取部分正常,但写入时提示找不到文件。

我的代码如下:

string jsonArchiveName = "test.json";

// Read the json 
using Stream fileStream = await FileSystem.OpenAppPackageFileAsync(jsonArchiveName);
using StreamReader reader = new StreamReader(fileStream);
string json = reader.ReadToEnd();

// modfy the json
dynamic obj = JsonConvert.DeserializeObject<dynamic>(json);
obj.objeto.value = num;
string output = JsonConvert.SerializeObject(obj);

// and finaly write on the json
using FileStream fileStreamWrite = new FileStream(jsonArchiveName, FileMode.Truncate);
byte[] messageByte = Encoding.ASCII.GetBytes(output);
fileStreamWrite.Write(messageByte, 0, messageByte.Length);

错误出在using FileStream fileStreamWrite = new FileStream(jsonArchiveName, FileMode.Truncate);这一行,抛出异常:

System.IO.FileNotFoundException: 'Could not find file 'C:\Windows\system32\teste2.json'.'

不清楚为什么写入时的查找路径和读取时用FileSystem.OpenAppPackageFileAsync的路径不一样。


问题原因

  • 应用包内的文件(raw文件夹)是只读的,无法直接修改。FileSystem.OpenAppPackageFileAsync读取的是应用安装目录里的文件,该路径仅拥有读取权限。
  • 直接使用FileStream写入文件名时,默认会去当前工作目录(比如Windows下的C:\Windows\system32)查找文件,而非应用包路径,因此会出现找不到文件的错误。

解决方法

要修改文件,需先把raw文件夹里的JSON文件复制到可写的应用数据目录,之后的读写操作都针对这个副本进行:

修改后的代码示例:

string jsonFileName = "test.json";
// 获取应用可写数据目录的文件路径
string targetFilePath = Path.Combine(FileSystem.AppDataDirectory, jsonFileName);

// 第一步:如果数据目录里没有文件,从应用包复制过去
if (!File.Exists(targetFilePath))
{
    using Stream packageStream = await FileSystem.OpenAppPackageFileAsync(jsonFileName);
    using FileStream fileStream = new FileStream(targetFilePath, FileMode.Create);
    await packageStream.CopyToAsync(fileStream);
}

// 第二步:读取应用数据目录里的文件
string json = await File.ReadAllTextAsync(targetFilePath);
dynamic obj = JsonConvert.DeserializeObject<dynamic>(json);
obj.objeto.value = num;
string output = JsonConvert.SerializeObject(obj);

// 第三步:写回应用数据目录的文件
await File.WriteAllTextAsync(targetFilePath, output);

关键说明

  • FileSystem.AppDataDirectory对应各平台的可写应用数据目录,例如:
    • Windows:C:\Users\<用户名>\AppData\Local\<应用标识>
    • Android:/data/data/<包名>/files
    • iOS:Library/Application Support
  • 应用包内的文件在安装后处于只读状态,无法直接修改,必须操作其副本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:05:20