我正在开发一款可以保存/加载数据的Unity游戏。我正处于这个项目的测试阶段,遇到了游戏拒绝在iOS中保存的异常情况。它在Android,Windows和OS X上运行时效果很好。这是我的适用代码:
FileStream file = File.Create(GetSavePath());
bf.Serialize(file, saveFile);
file.Close();
我将GetSavePath()
定义如下:
private string GetSavePath()
{
return Path.Combine(Application.persistentDataPath, SAVEPATH);
}
我将SAVEPATH
定义为SaveFile.bin
。请注意,问题明确与File.Create()
有关,如下面的跟踪所示:
IOException: Sharing violation on path /var/mobile/Containers/Data/Application/4AE45A80-AC36-4A96-9C69-BE01CB753896/Documents/SaveFile.bin
at System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean anonymous, FileOptions options) [0x00000] in <filename unknown>:0
at System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize) [0x00000] in <filename unknown>:0
at System.IO.File.Create (System.String path, Int32 bufferSize) [0x00000] in <filename unknown>:0
at System.IO.File.Create (System.String path) [0x00000] in <filename unknown>:0
at SaveManager.Save () [0x00000] in <filename unknown>:0
at SaveManager.NewSave () [0x00000] in <filename unknown>:0
at GameManager.NewSave () [0x00000] in <filename unknown>:0
at TitleManager.NewGame () [0x00000] in <filename unknown>:0
at UnityEngine.Events.InvokableCall.Invoke (System.Object[] args) [0x00000] in <filename unknown>:0
从上面可以看出,Invoke
被调用,因为用户必须单击按钮才能创建新游戏。跟踪中System.IO.File.Create
的问题对应于上面的FileStream file = File.Create(GetSavePath());
。
设备信息:
Unity版本:5.4.1f1
我尚未在其他iOS设备上进行测试。
答案 0 :(得分:1)
使用File.Open()
模式FileMode.OpenOrCreate
代替File.Create()
。目前的推测是File.Create()
无法立即释放文件锁定,导致返回的文件流无法访问该文件。