簡體   English   中英

隔離存儲文件處理

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM