IsolatedStorageFileStream抛出“IsolatedStorageExeption未处理”

时间:2013-02-12 18:25:15

标签: c# windows-phone-7.1 text-files xna-4.0 isolatedstorage

基本上我正在编写在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在文件已经存在时抛出一个exeption,所以我在创建新文件之前添加了isoStore.DeleteFile("HighScores.txt"),现在就像梦一样:)

[解决]

1 个答案:

答案 0 :(得分:1)

FileMode.CreateNew在文件已存在时抛出异常,因此您必须在创建新文件之前调用isoStore.DeleteFile(string FileName),或者如果您不是绝对需要使用FileMode.CreateNew使用{ {1}}而不是