C# UnauthorizedAccessException:访问路径[iOS/Unity3D]

C# UnauthorizedAccessException:访问路径[iOS/Unity3D],c#,ios,iphone,xcode,unity3d,C#,Ios,Iphone,Xcode,Unity3d,我需要你的帮助,所以昨天我想把我的游戏移植到iOS,这不是我第一次移植它,以前的版本总是移植成功,但不是现在 我在El Capitan上将Unity 5.3.4和5.3.5与Xcode 7.3一起使用,它成功地从Xcode编译而来,但是我在场景开始时初始化和生成的所有对象都不会出现在游戏中,我不知道它有什么问题,因为Unity或Xcode本身没有错误 但从日志来看,我怀疑是因为这个 UnauthorizedAccessException:拒绝访问路径“/var/mobile/Containers

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

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

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

UnauthorizedAccessException:拒绝访问路径“/var/mobile/Containers/Data/Application/280DC265-ABD8-41A3-8B87-74D09910FB24/Documentstemp.gjk”。 在System.IO.FileStream..ctor(System.String路径、FileMode模式、FileAccess访问、FileShare共享、Int32 bufferSize、布尔匿名、FileOptions选项)[0x00000]中:0 在:0中的System.IO.StreamWriter..ctor(System.String路径,布尔追加)[0x00000]处 在:0中的System.IO.File.CreateText(System.String路径)[0x00000]处

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

它在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);
            }
        }

    }
}
IEnumerator getBillboard()
{
WWW getBillboardlistURL=新建WWW(billboardlistURL);
收益返回getBillboardlistURL;
if(getBillboardlistURL.error!=null)
{
}
其他的
{
WWW imageLink=new WWW(pictLink[Mathf.FloorToInt(i/3)]);
收益回报率;
Texture2D imageTemp=imageLink.texture;
obj.transform.GetChild(0.GetComponent().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)];
印刷(“在线广告牌”);
///======将广告牌名称写入文件并保存=======
///=====================================结束============================
var bytes=imageLink.texture.EncodeToPNG();
//打印(Application.dataPath);
//cek文件
如果(重新下载图像)
{
File.writealBytes(Application.persistentDataPath+“/vendorBillboard/”+namaProduk[Mathf.FloorToInt(i/3)]+“.png”,字节);
打印(“重新下载SEMUA纹理!”);
}
obj.SetActive(假);
公告牌池。添加(obj);
}
}
}
}
是否有解决方法或修复方法


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

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

  • 在异常的末尾,它指出问题在
    System.IO.File.CreateText(System.String path)
    中,但是,您在代码中使用了
    System.IO.File.writealBytes()

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

    好吧

    今天我有机会测试我想出的修复方案,多亏了尼德尔斯基

    是的,它可以工作,出于某种原因,iOS不允许我将文件(在本例中为任何文件)直接保存到
    Application.persistentDataPath

    相反,我要做的是创建一个文件夹,然后在文件夹中创建/保存该文件,现在它可以正常工作了

    尝试使用
    Path.Combine(Application.persistentDataPath,texturename)
    以确保您使用正确的分隔符生成正确的路径。@Uripov我使用Path.Combine,而unity本身没有给出错误,但是它不能下载任何东西,甚至不能检查我的文件夹NP:我在PC和androi上测试了它,两者都给出了同样的错误,无法检索纹理,因为它没有下载,导致文件夹甚至无法创建路径。请回答,代码只是发生了什么的一个片段,但一般来说,这就是我从我的网站检索sprite的方式,但是是的,这也让我困惑,没有真正的迹象表明是哪一个导致了异常,至于创建文本,谢谢你指出,我;我会再检查一遍:)我只是再检查一遍,所以@Needleski,我使用持久数据路径,这是我用来创建/写入文本文件的唯一代码:,您是否可以看到导致异常的其他原因,我真的很困惑:/aaaaahh,我想我看到了问题,我直接将文件写入持久数据路径,我将尝试更改它并通过创建文件夹将其保存到一个文件夹中,它在精灵上的工作,它应该与文本文件一起工作,很快将更新ishSystem.IO.file.CreateText(Application.persistentDataPath+“temp.gjk”);应该是:System.IO.File.CreateText(System.IO.Path.Combine(Application.persistentDataPath,“temp.gjk”);