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

Xamarin(Visual Studio)写入文件失败:UnauthorizedAccessException求助

解决Xamarin中写入文件时的UnauthorizedAccessException问题

这个问题我碰到过不少次,核心原因其实是你找错了可写入的目录——Xamarin里的Assets文件夹是只读的!

为什么会报错?

你代码里用到的assets.Open("test.txt")指向的是应用打包时就固定的Assets资源目录,这个目录在应用运行时只有读取权限,完全不允许写入操作,所以不管是创建新文件还是修改现有文件,都会直接抛出UnauthorizedAccessException。

正确的解决方案:使用应用的可写入目录

Xamarin提供了几个安全的可写入目录,最常用的是应用的私有数据目录,这里不需要额外权限,而且数据仅属于你的应用:

示例代码:写入私有目录

// 获取应用私有可写入目录的完整路径
string writePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "test.txt");

// 使用StreamWriter写入(文件不存在会自动创建)
using (StreamWriter sw = new StreamWriter(writePath, append: false))
{
    sw.WriteLine("test");
}

如果需要操作Assets中的现有文件

如果你原本想修改Assets里的test.txt,得先把它复制到可写入目录,再进行修改:

// 1. 从Assets读取原文件内容
string originalContent;
using (StreamReader sr = new StreamReader(Assets.Open("test.txt")))
{
    originalContent = sr.ReadToEnd();
}

// 2. 修改内容(比如追加新文本)
string updatedContent = originalContent + "\nnew test content";

// 3. 写入到可写入目录
string writePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "test.txt");
File.WriteAllText(writePath, updatedContent);

关于外部存储的额外说明

如果需要把文件写到外部存储(比如SD卡),还要注意权限问题:

  • Android 9及以下:在AndroidManifest.xml中添加权限
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
  • Android 6.0及以上:需要动态申请权限
  • Android 10及以上:启用了分区存储,建议使用应用专属外部目录Context.GetExternalFilesDir(null)(无需额外权限),或者通过MediaStore操作公共目录

内容的提问来源于stack exchange,提问作者E.Most

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:17:23