0

基本的な分離ストレージ機能を使用しようとしていますが、次の行の SaveData 関数で無効な操作を取得し続けています。

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

これが私が取り組んでいる2つの主な機能です。

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); として使用されているファイルストリームが原因である可能性があると思います。作成されたファイルへの IsolatedStorageFileStream への参照を返し、次に 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 に答える