0

基本上我正在编写代码,在隔离存储中创建一个新文件,我确定我正确地关闭了流,但肯定有一些东西丢失了,你能看看它以确保我没有丢失有什么明显的吗?

这是我的保存函数,它是引发错误的地方,一旦用户输入他/她的名字,就会在游戏结束时调用它:

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.CreateNewuseFileMode.Create来代替

于 2013-02-12T19:58:07.897 回答