0

基本的に、私は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")、新しいファイルを作成する前に追加したので、今では夢のように機能します:)

[解決済み]

4

1 に答える 1

1

FileMode.CreateNewファイルが既に存在する場合は例外をスローするため、新しいファイルを作成する前に呼び出すか、代わりに使用するisoStore.DeleteFile(string FileName)必要がない場合は代わりに呼び出す必要がありますFileMode.CreateNewFileMode.Create

于 2013-02-12T19:58:07.897 に答える