Xamarin中使用WriteAllBytes的正确临时文件存储路径问题
解决移动设备临时存储MP3文件的路径问题
核心结论
对于临时存储、播放后即删除的MP3文件,使用FileSystem.CacheDirectory是Android和iOS平台的正确选择——这个路径本身具备代码可访问权限,模拟器中看不到子文件夹是系统权限限制导致的,不影响代码正常运行。
具体解决方案
1. 为何Directory.GetCurrentDirectory()等方法无效
在移动平台(Android/iOS)上,Directory.GetCurrentDirectory()、Environment.CurrentDirectory这类桌面端常用的路径获取方法不适用,返回null或/是正常现象。因为移动应用受沙箱权限限制,无法随意访问系统全局目录。
2. 缓存目录的合理性验证
FileSystem.CacheDirectory返回的路径(比如Android上的/data/user/0/com.companyname.lal/cache/)是应用专属缓存目录,满足你的需求:
- 完全适配临时存储场景,系统会在空间不足时自动清理,你也可以在播放完成后手动删除文件
- 应用拥有完整读写权限,代码可直接进行写入、读取、删除操作
3. 安卓模拟器看不到子文件夹的原因
安卓模拟器的默认文件管理器没有权限访问/data/user/0/下的应用沙箱目录,你可以通过两种方式验证文件是否存在:
- 代码中写入后,用
File.Exists(Path.Combine(FileSystem.CacheDirectory, "temp.mp3"))判断文件是否创建成功 - 使用Android Studio的Device File Explorer,进入
data/data/com.companyname.lal/cache/路径查看(/data/user/0/是多用户模式下的默认用户目录,实际等价于data/data/下的应用包名目录)
4. 写入文件的示例代码
// 假设mp3Bytes是你的MP3字节数组 string tempFilePath = Path.Combine(FileSystem.CacheDirectory, "temp_play.mp3"); File.WriteAllBytes(tempFilePath, mp3Bytes); // 执行播放操作... // 播放完成后删除文件 if (File.Exists(tempFilePath)) { File.Delete(tempFilePath); }
内容的提问来源于stack exchange,提问作者milkman33995
相关产品推荐
相关产品推荐

