/************************************************
* 创建人:陈鹏
* 创建日期:20170507
* Blog: http://www.liveslives.com
* ************************************************/
游戏在测试过程中出现了Bug。在部分机型模拟器上,文件不能读取,提示没有权限。
Exception
UnauthorizedAccessException: Access to the path "/data/data/com.tencent.tmgp.liveslives/files/Assembly-CSharp.dll" is denied.
System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean anonymous, FileOptions options)
System.IO.FileStream..ctor (System.String path, FileMode mode)
UI_UpdateAssetbundle+c__Iterator27.MoveNext ()
UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress)
我这里是海马玩模拟器,Android4.2.2系统。出现问题。
在我自己的手机上没有出现问题,手机是Android4.4系统。
在魅蓝系列没有问题。
在红米3没有问题。
在网易Mumu模拟器上也没有问题。
在夜神模拟器上没有问题,Android4.4.2系统。
纠结了一下午,这个DLL文件下载成功了,但是到了Unity中去读取,就出现了问题。
仔细过了一遍代码才发觉,读取的DLL文件和下载的DLL文件并不是同一个。
当文件下载完毕之后,会从SD卡中 通过
File.Move
移动到 /data/data/com.tencent.tmgp.liveslives/files/Assembly-CSharp.dll .然后再读取这个 dl 。
转自http://blog.csdn.net/huutu http://www.liveslives.com
在文件管理器中查看发现,文件移动后,文件权限变动了。
刚下载的Dll文件,权限如下:
DLL被移动到新的目录后,权限变了。
同样,我也尝试了
File.Copy
转自http://blog.csdn.net/huutu http://www.liveslives.com
然后我再尝试了新建一个文件,然后写入内容,这样创建的文件,就有正确的权限。
byte[] tmpBytes = File.ReadAllBytes(tmpFilePath);
File.WriteAllBytes(tmpFileRealPath, tmpBytes);
这样,文件才能被正确读取。
FileStream是没有问题的。