2017-01-02 10 views
2

私はデータを保存/読み込むUnityのゲームに取り組んでいます。私はこのプロジェクトのテスト段階にあり、ゲームがiOSでの保存を拒否する珍しい状況に遭遇しました。アンドロイド、Windows上で実行するとそれだけで正常に動作し、OS X.は、ここに私の適用コードです:File.CreateがiPhone 5Sで失敗する

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

は私がSaveFile.binとしてSAVEPATHを定義します。以下のように私はGetSavePath()を定義

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

。下のトレースに見られるような問題は、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

File.Create()の代わりにFileMode.OpenOrCreateのモードでFile.Open()を使用してください。現在の推測では、File.Create()がファイルのロックを直ちに解放できないため、返されたファイルストリームがファイルにアクセスできなくなります。

+0

ちょうどこれを発見しました。それは確かに解決策です!奇妙な...まだ他のプラットフォームでも動作しています。 –