Xamarin(Visual Studio)写入文件失败: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
相关产品推荐
相关产品推荐

