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

Unity开发Android应用访问PC本地文件遇FileNotFoundException求助

Android设备无法访问Windows本地文件的问题解决

核心错误原因

Android设备是独立的操作系统,拥有自身的文件系统,完全无法直接访问Windows电脑的本地文件路径(比如C:\Users\LIA\Documents\wat.txt)。你遇到的FileNotFoundException本质是Android设备的文件系统中根本不存在该路径,和Unity权限设置无关,管理员身份运行Unity也无法解决这个问题。

解决步骤

1. 将文件转移到Android可访问的位置

你需要把目标文件放到Android设备能读取的路径中,常见方案有两种:

  • 方案一:复制到Android设备存储
    将wat.txt复制到Android设备的内部存储(比如Documents文件夹),使用Android的文件路径访问,示例:
    string filePath = Path.Combine(Application.persistentDataPath, "wat.txt");
    // 也可直接指定内部存储绝对路径:/storage/emulated/0/Documents/wat.txt
    
  • 方案二:放入Unity StreamingAssets目录
    将文件放到Unity项目的Assets/StreamingAssets文件夹下,打包后通过Application.streamingAssetsPath访问,示例:
    string filePath = Path.Combine(Application.streamingAssetsPath, "wat.txt");
    

2. 修正上传代码的错误

你的代码中uploadRef.PutFileAsync(stream.ToString())存在严重问题:Stream.ToString()不会返回文件路径,只会返回流的类型名称(比如System.IO.FileStream),这会导致Firebase无法定位正确文件。你需要:

  • 若使用文件路径上传,直接传入路径字符串:
    uploadRef.PutFileAsync(filePath).ContinueWithOnMainThread(task => {
        // 后续处理逻辑
    });
    
  • 若使用已打开的流上传,改用PutStreamAsync方法:
    using (var stream = File.Open(filePath, FileMode.Open))
    {
        uploadRef.PutStreamAsync(stream).ContinueWithOnMainThread(task => {
            // 后续处理逻辑
        });
    }
    

完整修正代码示例

// 假设文件放在Android设备的persistentDataPath目录下
string filePath = Path.Combine(Application.persistentDataPath, "wat.txt");

// 先检查文件是否存在
if (File.Exists(filePath))
{
    using (var stream = File.Open(filePath, FileMode.Open))
    {
        // Firebase Storage 初始化
        var storage = FirebaseStorage.DefaultInstance;
        var storageReference = storage.GetReferenceFromUrl("gs://houdini-ac884.appspot.com");
        
        // 上传文件
        StorageReference uploadRef = storageReference.Child("uploads/newFile.meta");
        Debug.Log("Beginning Upload;;");
        
        uploadRef.PutStreamAsync(stream).ContinueWithOnMainThread((task) => {
            if(task.IsFaulted || task.IsCanceled){
                Debug.Log("Upload Failed with following error:");
                Debug.Log(task.Exception.ToString());
            }else{
                Debug.Log("File Uploaded with success");
            }
        });
    }
}
else
{
    Debug.LogError("File not found at path: " + filePath);
}

内容的提问来源于stack exchange,提问作者EvocativeAxis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:50:23