[英]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.