2014-01-05 2 views
0

임씨는 XNA에서 게임을하고 있습니다.
현재 저는 두 창과 xbox360을 모두 쓰고 있습니다.격리 된 저장소 파일 처리

다음 문제에 대한 올바른 접근 방법입니까?

내 콘텐츠에 이미있는 xbox의 격리 된 저장소에 파일을 저장하고 싶습니다. 모든 설정이 들어있는 settings.xml 파일이 있습니다. 내 콘텐츠에 컴파일되지 않고 (콘텐츠로 표시됨) 속성이 더 최신 인 경우 복사되므로 수정할 수 있지만 콘텐츠 내에서 유지 관리됩니다.

나는 윈도우 & 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 
} 

은 게임을 처음 실행할 때 작성해야 덜 복잡 또는 일반 스마트 설정과 같은 처리의 기본 파일과 다른 방법이있다 그런 다음 런타임 중에 수정할 수 있어야합니다.

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

그러나 이것이 어색함을 느낄 수있는 좋은 접근 방법인지 확실하지 않습니다. 그래서 나는이 대답을 표시하지 않을 것이다.