2012-05-05 9 views
0

私はいくつかの基本的な分離ストレージ機能を使用しようとしていると私は、この行に私のSaveDataを機能的に無効な操作を得続ける:ここ分離ストレージの問題WP7

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(); 
} 
+1

小さいファイルを作成しようとしましたか?ファイルに十分なスペースがない可能性があります。スペースがさらに必要な場合は、それをリクエストする必要があります。 – ChrisF

答えて

0

は、私はこの問題は、ファイルストリームは、メソッド呼び出し「savegameStorage.CreateFile(ファイル名)として使用中であることに起因するかもしれないと思います。 IsolatedStorageFileStreamへの参照を作成したファイルに返し、次にSaveData()を返します。まだ使用しているストリームを持っている最近作成されたファイルを試し続けます。

スタティックコールをパラメータなしで保持したい場合は、SaveNewData()の行に沿って何かを作成します。 openメソッドを呼び出す代わりにCreateFileを呼び出します。以下のようなもの。

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

関連する問題