2011-08-10 13 views
1

次のコードを使用して、XMLを独立したストレージに作成して読み込みます。最初の部分ではファイルが存在しない場合は隔離されたストレージに作成され、存在しない場合は隔離されたストレージファイルに既に作成された/ロードされたファイルがロードされます。 問題は、関数が呼び出されたときに(正常に)作成/ロードされたファイルを読み込もうとするときです。コードはこちらXMLを独立したストレージにロードする

public void InitAch() 
{ 
    using (var storage = IsolatedStorageFile.GetUserStoreForApplication()) 
    { 
     if (!storage.FileExists("Achievements.xml")) 
     { 
      using (Stream stream = storage.OpenFile("Achievements.xml", FileMode.Create, FileAccess.Write)) 
      { 
       XDocument xml = XDocument.Load("Achievements.xml"); 
       xml.Save(stream,SaveOptions.None); 
      } 
     } 
     else 
     { 
      using (Stream stream = storage.OpenFile("Achievements.xml", FileMode.Open, FileAccess.Read)) 
      { 

       XDocument xml = XDocument.Load(stream,LoadOptions.None); 
       Lexis.Page4.Achievements.sheep = Int32.Parse(xml.Root.Element("BlackSheep").Value); 
       Lexis.Page4.Achievements.singularity = Int32.Parse(xml.Root.Element("Singularity").Value); 
       Lexis.Page4.Achievements.luke = Int32.Parse(xml.Root.Element("LuckyLuke").Value); 
       Lexis.Page4.Achievements.gardener = Int32.Parse(xml.Root.Element("Gardener").Value); 
       Lexis.Page4.Achievements.dumbo = Int32.Parse(xml.Root.Element("Dumbo").Value); 
       Lexis.Page4.Achievements.joker = Int32.Parse(xml.Root.Element("Joker").Value); 
       Lexis.Page4.Achievements.maid = Int32.Parse(xml.Root.Element("Maid").Value); 
       Lexis.Page4.Achievements.mr = Int32.Parse(xml.Root.Element("MrWords").Value); 
       Lexis.Page4.Achievements.secret = Int32.Parse(xml.Root.Element("Detective").Value); 

      } 
     } 
    } 

私はあなたの助けに感謝します。このコードで

+1

正確にはどうなりますか?何か例外はありますか?私の最初の賭けは 'XDocument.Load'がファイルへのパスを知らないことです。 –

答えて

2
if (!storage.FileExists("Achievements.xml")) 
    using (Stream stream = storage.OpenFile("Achievements.xml", FileMode.Create, FileAccess.Write)) 
    { 
     XDocument xml = XDocument.Load("Achievements.xml"); 
     xml.Save(stream,SaveOptions.None); 
    } 

  • 行1:ファイルは、ライン2
  • 存在しない(空の)ファイルをロード:
  • ライン4ファイル(空の)新規作成 - この時点でファイルは空ですが、何もロードされていません!私はそれが原因でそれがスローされるか、またはローカルストレージに名前を解決できないと思います。いずれの場合もこの行は間違っています。
  • 5行目:あなたはXMLファイルの作成を修正する必要がありますファイル

に(?空の)XMLドキュメントを保存します。

+0

+1:ここで深刻な設計上の問題があります。 – NotMe

0

なぜ空のファイルを作成して保存しますか?それは少し間違っているようです。

空のファイルの読み込みに関しては、もちろん、それはxml.Root.Element("BlackSheep").Valueにアクセスするとすぐに例外が発生して失敗します。

この要素は空のファイルに存在しないため、Element("BlackSheep")はnullを返します。 .Valueプロパティアクセスによって例外が発生します。

は、だから私はあなたが必要とする援助の種類を正確にわからないんだけど、他のより:

  1. ない点がないよう、空のXMLを作成しないでください。そして/または、
  2. ファイルに実際に何かがあるかどうかをテストするために、あなたの読み込みにいくつかのコードを追加してください。
関連する問題