.NET 7 MAUI应用操作文件触发System.UnauthorizedAccessException权限拒绝
解决.NET 7 MAUI中文件访问拒绝错误
核心问题分析
你的代码存在逻辑错误:调用Directory.CreateDirectory(App.ZipDBPath)时,传入的是文件路径(StaticData.zip),这会创建一个名为StaticData.zip的目录,后续尝试用File.WriteAllBytes()往这个路径写入文件时,自然会触发"Access to the path is denied"错误——因为该路径已经是一个目录,而非可写入的文件。
另外,原代码中Directory.CreateDirectory的参数应该是目录路径ZipDBPathDir,而非文件路径。
修正后的代码
// 推荐使用MAUI官方的FileSystem API替代旧的Environment方式 var appDataDir = FileSystem.Current.AppDataDirectory; ZipDBPath = Path.Combine(appDataDir, "TempSD", "StaticData.zip"); ZipDBPathDir = Path.Combine(appDataDir, "TempSD"); if (data != null && data.Length > 0) { // 先确保目标目录存在 Directory.CreateDirectory(ZipDBPathDir); // 如果zip文件已存在,先删除 if (File.Exists(ZipDBPath)) { File.Delete(ZipDBPath); } // 写入zip文件到指定路径 File.WriteAllBytes(ZipDBPath, data); // 解压文件到目标目录,允许覆盖已存在文件 ZipFile.ExtractToDirectory(ZipDBPath, ZipDBPathDir, overwriteFiles: true); // 清理临时zip文件 File.Delete(ZipDBPath); }
MAUI额外注意事项
- 优先使用MAUI Storage API:
FileSystem.Current.AppDataDirectory是MAUI推荐的应用私有数据目录路径,跨平台兼容性更好,替代原有的Environment.SpecialFolder.Personal。 - 文件覆盖处理:调用
ZipFile.ExtractToDirectory时加上overwriteFiles: true参数,避免解压时因文件已存在抛出错误。 - 权限验证:应用私有目录不需要额外权限,但如果后续操作外部存储路径,需要在对应平台项目中配置权限(比如Android的
READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE)。
内容的提问来源于stack exchange,提问作者Sarath
相关产品推荐
相关产品推荐

