iPhone 5S上的File.Create失败

时间:2017-01-02 21:56:09

标签: c# ios unity3d

我正在开发一款可以保存/加载数据的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());

设备信息:

  • iPhone 5S
  • iOS 10.1

Unity版本:5.4.1f1

我尚未在其他iOS设备上进行测试。

1 个答案:

答案 0 :(得分:1)

使用File.Open()模式FileMode.OpenOrCreate代替File.Create()。目前的推测是File.Create()无法立即释放文件锁定,导致返回的文件流无法访问该文件。