• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c# - 未授权访问异常 : Access to the path [ iOS/Unity3D ]

[复制链接]
菜鸟教程小白 发表于 2022-12-13 13:46:33 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我需要你的帮助,所以昨天我想将我的游戏移植到iOS,这不是我第一次移植它,以前的版本总是成功移植,但现在不是

我在 El Capitan 上使用 Unity 5.3.4 和 5.3.5 和 Xcode 7.3,它成功地从 XCode 编译,但我在场景开始时初始化和生成的所有对象都不会出现在游戏中,我不知道它有什么问题,因为 Unity 或 XCode 本身没有错误

但从日志中,我怀疑是因为这个

UnauthorizedAccessException: Access to the path"/var/mobile/Containers/Data/Application/280DC265-ABD8-41A3-8B87-74D09910FB24/Documentstemp.gjk" is denied. at System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean anonymous, FileOptions options) [0x00000] in :0 at System.IO.StreamWriter..ctor (System.String path, Boolean append) [0x00000] in :0 at System.IO.File.CreateText (System.String path) [0x00000] in :0

我假设是因为在启动时,游戏将使用 WWW 方法从安全网站访问纹理/ Sprite ,使用 HTTP 而不是 HTTPS,并尝试在 Application.PersistentDataPath 下载并将其保存为 Sprite ,然后将其应用到游戏中

它在 Android 上运行良好,但不知何故 iOS 不允许读取/写入文件,导致错误

这是我使用的代码片段:

IEnumerator getBillboard()
{
    WWW getBillboardlistURL = new WWW(billboardlistURL);
    yield return getBillboardlistURL;

    if (getBillboardlistURL.error != null)
    {

    }
    else
    {


        WWW imageLink = new WWW(pictLink[Mathf.FloorToInt(i / 3)]);
        yield return imageLink;
        Texture2D imageTemp = imageLink.texture;
        obj.transform.GetChild(0).GetComponent<SpriteRenderer>().sprite = Sprite.Create(imageTemp, new Rect(0, 0, imageTemp.width, imageTemp.height), new Vector2(0.5f, 0.5f));
        obj.name = namaProduk[Mathf.FloorToInt(i / 3)];

                print("BILLBOARD ONLINE");

        /// ======= WRITE BILLBOARD NAME TO FILE AND SAVE IT =======



        /// ======================= END ============================


        var bytes = imageLink.texture.EncodeToPNG();

        //print(Application.dataPath);

        //cek file
        if(redownloadImage)
                {
                    File.WriteAllBytes(Application.persistentDataPath + "/vendorBillboard/" + namaProduk[Mathf.FloorToInt(i / 3)] + ".png", bytes);
                    print("REDOWNLOAD SEMUA TEXTURE!");
                }

                obj.SetActive(false);
                billboardPool.Add(obj);
            }
        }

    }
}

是否有解决方法或解决方法?

提前谢谢你



Best Answer-推荐答案


查看异常并将其与您的代码进行比较,我认为您提供的代码不是发生错误的地方...原因有两个:

  1. 异常显示“UnauthorizedAccessException:访问路径”/var/mobile/Containers/Data/Application/280DC265-ABD8-41A3-8B87-74D09910FB24/Documentstemp.gjk“被拒绝”。但是,在您的代码中,您的路径中有 /vendorBillboard/。注意 /vendorBillboard/ 不在异常的路径中。

  2. 在异常结束时,它指出问题出在 System.IO.File.CreateText (System.String path),但是,您使用了 System.IO .File.WriteAllBytes() 在您的代码中。

我猜您正在“其他地方”创建一个文本文件,并且您使用的是 Application.dataPath 而不是 Application.persistentDataPath

关于c# - 未授权访问异常 : Access to the path [ iOS/Unity3D ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37830969/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap