我只是尝试使用一些基本的隔离存储功能,并且我在此行的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();
}
答案 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.
}
希望有所帮助。