隔离存储问题WP7

时间:2012-05-05 22:23:39

标签: windows-phone-7 isolatedstorage

我只是尝试使用一些基本的隔离存储功能,并且我在此行的SaveData函数中继续进行无效操作:

IsolatedStorageFileStream fs = savegameStorage.OpenFile(Filename, FileMode.Open); 

以下是我正在使用的两个主要功能。

public static void OpenData() 
{ 
    IsolatedStorageFile savegameStorage = IsolatedStorageFile.GetUserStoreForApplication(); 
        if (savegameStorage.FileExists(Filename)) 
        { 
            using (IsolatedStorageFileStream fs = savegameStorage.OpenFile(Filename, System.IO.FileMode.Open)) 
            { 
                if (fs != null) 
                { 
                    if (fs.Length == 0) 
                    { 
                        fs.Close(); 
                        fs.Dispose(); 
                        SaveData(); 
                        return; 
                    } 

                    // Reload the saved high-score data. 
                    byte[] saveBytes = new byte[6 * (50)]; 
                    int count = fs.Read(saveBytes, 0, (6 * 50) + 8); 
                    ByteStream BS = new ByteStream(ByteStreamMode.Read, saveBytes, 0); 

                    LevelData.LastStage = BS.ReadInt32(); 
                    LevelData.LastLevel = BS.ReadInt32(); 

                    for (int i = 0; i < 6; ++i) 
                        for (int x = 0; x < 5; ++x) 
                            for (int y = 0; y < 10; ++y) 
                                LevelData.LevelComplete[i][x, y] = BS.ReadBool(); 
                } 
                else 
                { 
                    fs.Close(); 
                    fs.Dispose(); 
                    savegameStorage.CreateFile(Filename); 
                    SaveData(); 
                } 

                fs.Close(); 
            } 
        } 
        else 
        { 
            SaveData(); 
        } 
    } 
public static void SaveData() 
{ 
    IsolatedStorageFile savegameStorage = IsolatedStorageFile.GetUserStoreForApplication(); 
    IsolatedStorageFileStream fs = savegameStorage.OpenFile(Filename, FileMode.Open); 

    if (fs != null) 
    { 
        ByteStream BS = new ByteStream(ByteStreamMode.Write, null, 0); 

        BS.WriteInt32(LevelData.LastStage); 
        BS.WriteInt32(LevelData.LastLevel); 

        for (int i = 0; i < 6; ++i) 
            for (int x = 0; x < 5; ++x) 
                for (int y = 0; y < 10; ++y) 
                    BS.WriteBool(LevelData.LevelComplete[i][x, y]); 

        fs.Write(BS.StreamBuffer, 0, BS.StreamBuffer.Length); 
    } 

    fs.Close(); 
}

1 个答案:

答案 0 :(得分:0)

我认为问题可能是由于文件流正在被用作方法调用'savegameStorage.CreateFile(FileName);将一个引用返回到一个IsolatedStorageFileStream到创建的文件然后你的SaveData();继续尝试打开最近创建的文件,该文件仍在使用中。

如果你想保持没有参数的静态调用,我会创建SaveNewData()行;而不是调用open方法调用CreateFile。像下面的东西。

public static void SaveNewData() 
{ 
    IsolatedStorageFile savegameStorage = IsolatedStorageFile.GetUserStoreForApplication(); 
    IsolatedStorageFileStream fs = savegameStorage.CreateFile(Filename);
    //Continue with existing code.
}

希望有所帮助。