向AppDataDirectory写入文件失败且无报错(Android模拟器)
Android模拟器中MAUI写入/读取AppDataDirectory文件失败的解决方案
核心错误点
- 读取API误用:你使用的
OpenAppPackageFileAsync是用来读取应用安装包内的资源文件(如Resources/Raw下的文件),而非写入到AppDataDirectory的用户文件,这是读取时抛出FileNotFoundException的直接原因。 - 写入逻辑未显式确保目录存在:虽然
FileMode.Create理论上会自动创建父目录,但显式处理目录存在性能避免潜在的异常。
修正后的代码
写入文件方法(简化+鲁棒性提升)
public async Task CopyFileToAppDataDirectory(string filename, string filedata) { string appDataDir = FileSystem.AppDataDirectory; // 显式确保目标目录存在 Directory.CreateDirectory(appDataDir); string targetFilePath = Path.Combine(appDataDir, filename); // 用File.WriteAllTextAsync简化流操作,自动处理编码和资源释放 await File.WriteAllTextAsync(targetFilePath, filedata, Encoding.UTF8); }
读取文件方法(适配AppData目录)
public async Task<string> ReadTextFile(string filename) { try { string targetFilePath = Path.Combine(FileSystem.AppDataDirectory, filename); // 先检查文件是否存在,避免不必要的异常 if (!File.Exists(targetFilePath)) { return string.Empty; } return await File.ReadAllTextAsync(targetFilePath, Encoding.UTF8); } catch (Exception ex) { // 可添加日志输出,方便排查具体错误 Console.WriteLine($"读取文件出错:{ex.Message}"); return string.Empty; } }
额外排查步骤
- 确保异步操作被正确等待:调用
CopyFileToAppDataDirectory时必须使用await,否则写入操作可能还未完成就执行读取,导致文件未找到。 - 检查模拟器文件系统:通过Android Studio的Device File Explorer查看
/data/user/0/com.veland.dailytasks/files目录,确认文件是否生成(需应用为debug版本才能访问该目录)。 - 添加异常捕获排查写入问题:在写入方法中加入try-catch,捕获并输出异常信息,定位具体失败原因(如权限、路径错误等)。
内容的提问来源于stack exchange,提问作者Eric V.
相关产品推荐
相关产品推荐

