基本的に、私はIsolatedStorageに新しいファイルを作成するコードを書いています。ストリームを正しく閉じていると確信していますが、何かが欠けているに違いありません。明らかな何か?
これが私の保存機能です。ユーザーが自分の名前を入力すると、エラーがスローされ、ゲームの最後に呼び出される場所です。
public void SaveHighScores(string NewName, int NewScore)
{
SortHighScores(NewName, NewScore);
IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();
try
{
using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream("HighScores.txt", FileMode.CreateNew, isoStore))
{
using (StreamWriter writer = new StreamWriter(isoStream))
{
for (int i = 0; i < 5; i++)
{
writer.WriteLine(MyScores[i].Name);
writer.WriteLine(MyScores[i].Score);
}
writer.Close();
}
isoStream.Close();
}
}
catch (IsolatedStorageException e)
{
throw e; // "IsolatedStorageException was unhandled" error now occurs here
}
}
そして、これが私の読み取り関数です。初期化中にゲームの開始時に一度呼び出されます。
public void ReadHighScores()
{
IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();
if (isoStore.FileExists("HighScores.txt"))
{
try
{
using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream("HighScores.txt", FileMode.Open, isoStore))
{
using (StreamReader reader = new StreamReader(isoStream))
{
int i = 0;
while (!reader.EndOfStream)
{
MyScores[i].Name = reader.ReadLine();
string scoreString = reader.ReadLine();
MyScores[i].Score = Convert.ToInt32(scoreString);
i++;
}
reader.Close();
}
isoStream.Close();
}
}
catch (IsolatedStorageException e)
{
throw e;
}
}
else
{
if (!failedRead)
{
failedRead = true;
ReadHighScores();
}
}
}
誰でもこれに光を当てることができますか?
[編集]
なんらかの理由で、アプリの新規インストールでゲームの保存機能を初めて呼び出すと、これが機能するようになりましたが、次回プレイするとき、またはゲームを再起動して再度プレイすると、保存しようとするとクラッシュします。奇妙な、FileMode.CreateNew
おそらく私が間違っているところですか?
[編集]
うん、FileMode.CreateNew
ファイルが既に存在するときに例外をスローするのでisoStore.DeleteFile("HighScores.txt")
、新しいファイルを作成する前に追加したので、今では夢のように機能します:)
[解決済み]