2017-01-02 92 views
2

我正在開發保存/加載數據的Unity遊戲。我正處於該項目的測試階段,並遇到了遊戲拒絕在iOS中保存的異常情況。當在Android,Windows上運行它工作得很好,和OS X.這是我的應用代碼:iPhone 5S上的File.Create失敗

FileStream file = File.Create(GetSavePath()); 
bf.Serialize(file, saveFile); 
file.Close(); 

我定義GetSavePath()如下:

private string GetSavePath() 
{ 
    return Path.Combine(Application.persistentDataPath, SAVEPATH); 
} 

我定義爲SAVEPATHSaveFile.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

統一版本:5.4.1f1

我還沒有測試其它iOS設備。

回答

1

使用File.Open()與模式FileMode.OpenOrCreate而不是File.Create()。目前的猜測是,File.Create()無法立即釋放對該文件的鎖定,從而阻止返回的文件流訪問該文件。

+0

剛剛發現了這個,它確實是解決方案!奇怪......至少在所有其他平臺上仍然有效! –

相關問題