File.Create在iPhone 5S上失败
我正在开发一个保存/加载数据的Unity游戏。 我正处于这个项目的testing阶段,遇到了一个不寻常的情况,游戏拒绝在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
被调用,因为用户必须点击一个button来创build一个新的游戏。 跟踪中的System.IO.File.Create
问题对应于FileStream file = File.Create(GetSavePath());
以上。
设备信息:
- iPhone 5S
- iOS 10.1
Unity版本:5.4.1f1
我还没有在其他iOS设备上testing。
使用File.Open()
与模式FileMode.OpenOrCreate
而不是File.Create()
。 目前的猜测是, File.Create()
无法立即释放文件的锁,防止返回的文件stream访问该文件。