0

我只是在尝试使用一些基本的独立存储功能,并且在此行的 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(); 
}
4

1 回答 1

0

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

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

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

希望有帮助。

于 2012-05-06T03:28:26.197 回答