Моя игра WP7 либо неправильно читает, либо пишет из IsolatedFileStream
Я пытаюсь добавить локальную систему рекордов в мою игру и запустил кирпичную стену с чтением и записью файлов, согласно программистам и лекторам, которых я знаю в реальной жизни, и несколько учебников в Интернете, мой код должен работать как я хочу, однако, когда бы я ни начинал свою игру, мой высокий балл не загружался, ниже приведены мои функции как для чтения, так и для записи в файл, есть ли глупые ошибки, которые я делаю?
public void ReadHighScore()
{
byte[] myByteArray = new byte[64]; // Creates a new local byte array with a length of 64
using (var store = IsolatedStorageFile.GetUserStoreForApplication()) // Creates an IsolatedStorageFile within the User Storage
using (var stream = new IsolatedStorageFileStream("highscore.txt", System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite, store)) // Creates a new filestream attatched to the storage file
{
if (stream != null) // Checks to see if the filestream sucessfully read the file
{
int streamLength = (int)stream.Length; // Gets the length of the filestream
stream.Read(myByteArray, 0, streamLength); // Parses the filestream to the byte array
}
else
myState = (int)game_state.Terminate; // Temporary Error checking, the function gets though this without triggering the 'terminate' gamestate
}
string ScoreString = myByteArray.ToString(); // Parses the byte array to a string
Int32.TryParse(ScoreString, out highScore.score); // Parses the string to an integer
}
public void SaveHighScore()
{
byte[] myByteArray = new byte[64]; // Creates a new local byte array with a length of 64
using (var store = IsolatedStorageFile.GetUserStoreForApplication()) // Creates an IsolatedStorageFile within the User Storage
using (var stream = new IsolatedStorageFileStream("highscore.txt", System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite, store)) // Creates a new filestream attatched to the storage file
{
if (stream != null) // Checks to see if the filestream sucessfully read the file
{
int streamLength = (int)stream.Length; // Gets the length of the filestream
stream.Write(myByteArray, 0, streamLength); // Parses the byte array to the filestream
}
else
myState = (int)game_state.Terminate; // Temporary Error checking, the function gets though this without triggering the 'terminate' gamestate
}
}
}
1 ответ
Во-первых, в части чтения есть ошибка: вы открываете файл с помощью FileMode.Create
,
И согласно документации:
Указывает, что операционная система должна создать новый файл. Если файл уже существует, он будет перезаписан.
Так что в основном ваш ReadHighScore
удаляет старый файл и создает новый. Что, я считаю, не то, что вы хотели сделать. замещать FileMode.Create
от FileMode.OpenOrCreate
(только в ReadHighScore
метод), и вы должны иметь лучший результат.
Кроме того, есть ошибка в SaveHighScore
на этой линии:
stream.Write(myByteArray, 0, streamLength);
Так как вы создаете файл, streamLength
должен быть равен 0. Следовательно, вы ничего не пишете. Что вы действительно хотите сделать, это:
stream.Write(myByteArray, 0, myByteArray.Length);
Вы должны рассмотреть возможность использования StreamReader
, StreamWriter
, BinaryReader
, а также BinaryWriter
для чтения / записи в потоки, так как они гораздо проще в использовании.
И последнее, но не менее важное: данные, которые вы читаете и пишете, неверны. в SaveHighScore
метод, вы пытаетесь сохранить пустой массив, фактический высокий балл нигде не найти. в ReadHighScore
метод, это еще хуже: ты читаешь myByteArray.ToString()
, который всегда будет равен System.Byte[]
,
В конце ваш код должен выглядеть примерно так: (highScore.score
объявлен как int
)
public void ReadHighScore()
{
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
using (var stream = new IsolatedStorageFileStream("highscore.txt", System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Read, store))
{
using (var reader = new BinaryReader(stream))
{
highScore.score = reader.ReadInt32();
}
}
}
}
public void SaveHighScore()
{
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
using (var stream = new IsolatedStorageFileStream("highscore.txt", System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite, store))
{
using (var writer = new BinaryWriter(stream))
{
writer.Write(highScore.score);
}
}
}
}