[英]Isolated storage file handling
我正在使用XNA开发游戏。
我目前正在写Windows和xbox360。
这是解决以下问题的正确方法吗?
我想将文件保存到xbox上的隔离存储中,该文件已经存在于我的内容中。 我有一个包含所有设置的settings.xml文件。 它在我的内容中具有不被编译的属性(标记为Content),并且如果较新则进行复制,因此可以对其进行修改,但仍保留在Content中。
我有一个保存和加载功能,它对Windows和Xbox的作用不同,当前正在加载GameSettings对象,但也能够保存和加载XML文件。
加载:
public static GameSettings Load(string settingsFilename)
{
GameSettings settings; // Creates a new instance of GameSettings
#if WINDOWS
using (Stream stream = File.OpenRead(settingsFilename))// Open and Read-stream from the filename entered
{
XmlSerializer serializer = new XmlSerializer(typeof(GameSettings)); // Serializer of type GameSettings
settings = (GameSettings)serializer.Deserialize(stream); //Deserialize the xml file stream and fill the data into a GameSettings object
}
#elif XBOX
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(settingsFilename, FileMode.Open, FileAccess.Read, isf))
{
XmlSerializer serializer = new XmlSerializer(typeof(GameSettings));
settings = (GameSettings)serializer.Deserialize(stream);
}
}
#endif
return settings;
}
救:
public static void Save(string settingsFileName, GameSettings settings)
{
#if WINDOWS
using (Stream stream = File.OpenWrite(settingsFileName))// Open and Write-stream from the filname entered
{
XmlSerializer serializer = new XmlSerializer(typeof(GameSettings)); // Serializer of type GameSettings
serializer.Serialize(stream, settings); // serialize the GameSettings data into the stream
}
#elif XBOX
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(settingsFileName, FileMode.OpenOrCreate, isf))
{
XmlSerializer serializer = new XmlSerializer(typeof(GameSettings));
serializer.Serialize(stream, settings);
}
}
#endif
}
是否有其他方法可以处理诸如设置之类的默认文件,而不那么复杂或简单明了,这些方法只应在游戏首次启动时创建,然后才能在运行时进行修改。
我使用以下方法将文件从内容保存到隔离的存储中:代码相当简单,因此我将不对其进行注释。
public static void InitializeFiles()
{
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
if (!isf.FileExists("settings.xml"))
{
isf.CreateFile("settings.xml").Dispose();
XDocument xml;
using (Stream stream = File.Open("Content/settings.xml", FileMode.Open, FileAccess.Read))
{
xml = XDocument.Load(stream);
}
using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream("settings.xml", FileMode.Create, isf))
{
xml.Save(stream);
}
}
}
}
但是我仍然不确定这是否是一个好方法,因为它感觉很笨拙。 所以我不会标记为已回答。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.