2017-01-02 3 views
2

Я работаю над игрой Unity, которая сохраняет/загружает данные. Я участвую в стадии тестирования этого проекта и столкнулся с необычным обстоятельством, в котором игра отказывается сэкономить в iOS. Он прекрасно работает при запуске на Android, Windows и OS X. Вот мой применимый код:File.Create не работает на iPhone 5S

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

Использовать File.Open() с режимом FileMode.OpenOrCreate вместо File.Create(). Текущая спекуляция заключается в том, что File.Create() не может немедленно освободить блокировку файла, не позволяя возвращенному файловому потоку получить доступ к файлу.

+0

Только что открыл это, и это действительно решение! Странно ... По-прежнему работает на всех других платформах, по крайней мере! –

Смежные вопросы