C# 在iPhone 5S上创建文件失败

C# 在iPhone 5S上创建文件失败,c#,ios,unity3d,C#,Ios,Unity3d,我正在开发一款Unity游戏,它可以保存/加载数据。我在这个项目的测试阶段,遇到了一个不寻常的情况,游戏拒绝在iOS中保存。在Android、Windows和OS X上运行时,它工作正常。以下是我的适用代码: FileStream file = File.Create(GetSavePath()); bf.Serialize(file, saveFile); file.Close(); 我将GetSavePath()定义如下: private string GetSavePath() {

我正在开发一款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 
IOException:path/var/mobile/Containers/Data/Application/4AE45A80-AC36-4A96-9C69-BE01CB753896/Documents/SaveFile.bin上的共享冲突
在System.IO.FileStream..ctor(System.String路径、FileMode模式、FileAccess访问、FileShare共享、Int32 bufferSize、布尔匿名、FileOptions选项)[0x00000]中:0
在System.IO.FileStream..ctor(System.String路径、FileMode模式、FileAccess访问、FileShare共享、Int32 bufferSize)[0x00000]中:0
在System.IO.File.Create(System.String路径,Int32 bufferSize)[0x00000]中:0
在:0中的System.IO.File.Create(System.String路径)[0x00000]处
在0中的SaveManager.Save()[0x00000]处
在0中的SaveManager.NewSave()[0x00000]处
在GameManager.NewSave()[0x00000]中:0
在0中的TitleManager.NewGame()[0x00000]处
在:0中的UnityEngine.Events.InvokableCall.Invoke(System.Object[]args)[0x00000]处
从上面可以看出,调用
Invoke
是因为用户必须单击按钮才能创建新游戏。跟踪中的
System.IO.File.Create
问题对应于
FileStream File=File.Create(GetSavePath())以上

设备信息:

  • iphone5s
  • iOS 10.1
统一版本:5.4.1f1


我还没有在其他iOS设备上进行测试。

使用
File.Open()
模式
FileMode.Open或Create
而不是
File.Create()
。目前的推测是
File.Create()
无法立即释放文件上的锁,阻止返回的filestream访问该文件。

刚刚发现了这一点,这确实是解决方案!奇怪的至少在所有其他平台上仍然有效!