C# UWP中使用File.WriteAllText()写入文本文件失败
嘿,这个问题我太熟了!你遇到的UnauthorizedAccessException是因为UWP应用的安装目录(也就是你看到的AppX\Assets路径)是只读的——这是系统的安全沙箱机制,防止应用篡改自己的安装文件,毕竟这个目录是安装包解压出来的,系统会锁定它的写入权限。
那正确的做法是什么呢?你得把文件写到应用专属的可读写目录里,系统给我们提供了几个选项:
LocalFolder:应用的本地私有目录,卸载应用时会被删除,适合存储只在当前设备使用的数据RoamingFolder:会同步到用户的微软账户,适合跨设备同步的小数据TemporaryFolder:临时文件目录,系统可能会自动清理
我给你修改一下代码,用LocalFolder来实现你的需求:
public async Task WriteAsync() { string lines; try { lines = "Hello, World"; // 获取应用的本地可写文件夹 var localFolder = Windows.Storage.ApplicationData.Current.LocalFolder; // 创建或覆盖Write.txt文件 var targetFile = await localFolder.CreateFileAsync("Write.txt", Windows.Storage.CreationCollisionOption.ReplaceExisting); // 异步写入文本内容 await Windows.Storage.FileIO.WriteTextAsync(targetFile, lines); } catch (System.Exception e) { lines = e.Message; } }
这里有几个要注意的点:
- 别再用
File.WriteAllText这种传统的System.IO API了,UWP的沙箱环境更推荐用Windows.Storage下的异步API,它们能更好地适配权限规则 - 如果之后需要读取这个文件,同样要从
LocalFolder里去读取,而不是Assets目录 - 如果你需要把文件写到用户能直接找到的地方(比如文档库),那得在应用清单里声明对应的权限,不过一般优先用应用私有目录,既安全又方便
记住:Assets目录只能用来存放应用打包时自带的静态资源(比如图片、默认配置文件),只能读不能写哦!
内容的提问来源于stack exchange,提问作者Steve C
相关产品推荐
相关产品推荐

