2014-01-05 87 views
0

我在XNA的遊戲工作。
我目前正在寫入Windows和xbox360。孤立的存儲文件處理

這是以下問題的正確方法嗎?

我想將文件保存到xbox上已隔離存儲的內容中。 我有一個包含所有設置的settings.xml文件。這是在我的內容與屬性不編譯(標記爲內容),並複製如果更新,所以它可以被修改,但仍然保持在內容。

我有一個保存和加載函數,對於xbox的windows &有不同的作用,並且當前正在加載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 
} 

是否有其他方式不那麼複雜的或類似的設置操作默認文件平原聰明,只應創建第一次啓動遊戲,然後它應該可以在運行時修改。

+0

你應該從你的if語句中提取'XmlSerializer serializer = ...',所以你不必重複兩次。 –

回答

1

我使用以下方法將文件從內容保存到獨立存儲中: 代碼非常簡單,所以我不會評論它。

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); 
      } 
     } 
    } 
} 

但我仍然不確定這是否是一個好方法,因爲它感覺笨拙。所以我不會回答這個問題。