You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:52:45