2012-01-21 13 views
1

xmlファイルをストリームリーダーでダウンロードしたWP7の隔離ストレージに保存しようとしていますが、save(isostream) 。 C#で手動でXdocumentを作成すると、私の節約方法が完璧に機能するため、xmlファイルに問題があると思われます。誰かが同じようなものをexpereinced誰ですか?おかげxmlファイルを隔離ストレージ(WP7)に保存するときに変換バッファがオーバーフローする

コード:

using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication()) 
        { 
         using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream("test1.xml", FileMode.Create, isoStore)) 
         { 
          xmlDoc.Save(isoStream); 
         } 
        } 

xmlファイル

- <pactrack version="1.0" date="Sat Jan 21 19:22:48 CET 2012" size="276" lang="SE"> 
    <header /> 
- <body> 
    <programevent level="4">måste anges i sökvärdet kolliid: dfs</programevent> 
    </body> 
    <footer /> 
    </pactrack> 

コールスタック

mscorlib.dll!System.Text.Encoder.Convert(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex, int byteCount, bool flush, out int charsUsed, out int bytesUsed, out bool completed) + 0x143 bytes  
    System.Xml.dll!System.Xml.XmlEncodedRawTextWriter.FlushEncoder() + 0x31 bytes 
    System.Xml.dll!System.Xml.XmlEncodedRawTextWriter.Flush() + 0xc bytes 
    System.Xml.dll!System.Xml.XmlWellFormedWriter.Close() + 0x4b bytes 
    System.Xml.dll!System.Xml.XmlWriter.Dispose(bool disposing) + 0x1b bytes  
    System.Xml.dll!System.Xml.XmlWriter.Dispose() + 0x7 bytes 
    System.Xml.Linq.dll!System.Xml.Linq.XDocument.Save(System.IO.Stream stream, System.Xml.Linq.SaveOptions options) + 0x56 bytes 
    System.Xml.Linq.dll!System.Xml.Linq.XDocument.Save(System.IO.Stream stream) + 0xd bytes 
> panoramaTest.dll!panoramaTest.MainPage.client_DownloadStringCompleted(object sender, System.Net.OpenReadCompletedEventArgs e) Line 49 + 0x8 bytes C# 
    System.Net.dll!System.Net.WebClient.OnOpenReadCompleted(System.Net.OpenReadCompletedEventArgs e) + 0x15 bytes 
    System.Net.dll!System.Net.WebClient.OpenReadOperationCompleted(object arg) + 0xc bytes 
    mscorlib.dll!System.Reflection.RuntimeMethodInfo.InternalInvoke(System.Reflection.RuntimeMethodInfo rtmi, object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object parameters, System.Globalization.CultureInfo culture, bool isBinderDefault, System.Reflection.Assembly caller, bool verifyAccess, ref System.Threading.StackCrawlMark stackMark) 
    mscorlib.dll!System.Reflection.RuntimeMethodInfo.InternalInvoke(object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object[] parameters, System.Globalization.CultureInfo culture, ref System.Threading.StackCrawlMark stackMark) + 0x168 bytes 
    mscorlib.dll!System.Reflection.MethodBase.Invoke(object obj, object[] parameters) + 0xa bytes 
    mscorlib.dll!System.Delegate.DynamicInvokeOne(object[] args) + 0x98 bytes 
    mscorlib.dll!System.MulticastDelegate.DynamicInvokeImpl(object[] args) + 0x8 bytes 
    mscorlib.dll!System.Delegate.DynamicInvoke(object[] args) + 0x2 bytes 
    System.Windows.dll!System.Windows.Threading.DispatcherOperation.Invoke() + 0xc bytes  
    System.Windows.dll!System.Windows.Threading.Dispatcher.Dispatch(System.Windows.Threading.DispatcherPriority priority) + 0x83 bytes 
    System.Windows.dll!System.Windows.Threading.Dispatcher.OnInvoke(object context) + 0x8 bytes 
    System.Windows.dll!System.Windows.Hosting.CallbackCookie.Invoke(object[] args) + 0x19 bytes 
    System.Windows.dll!System.Windows.Hosting.DelegateWrapper.InternalInvoke(object[] args) + 0x2 bytes 
    System.Windows.RuntimeHost.dll!System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(System.IntPtr pHandle, int nParamCount, System.Windows.Hosting.NativeMethods.ScriptParam[] pParams, ref System.Windows.Hosting.NativeMethods.ScriptParam pResult) + 0x5e bytes 
    [External Code] 
+0

callstackで完全な例外をコピーできますか? –

+0

こんにちは、最初の質問に完全なコールスタックを追加しました。 – Krst

答えて

1

私は、問題を再現することができました:

 var xmlDoc = XDocument.Load(new MemoryStream(Encoding.Unicode.GetBytes(xml))); 

     xmlDoc.Declaration = new XDeclaration("1.0", "iso-8859-1", "yes"); 

     using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      using (var isoStream = new IsolatedStorageFileStream("test1.xml", FileMode.Create, isoStore)) 
      { 
       xmlDoc.Save(isoStream); 
      } 
     } 

私はまだ理解していませんが、それはエンコーダから来ているようです。指定されたエンコーダで無効な文字がありますか?とにかく

、私はあなたが明示的にunicodeに切り替えることで動き回ることができると思う:

xmlDoc.Declaration = new XDeclaration("1.0", "UTF-8", "yes"); 

using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication()) 
{ 
    using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream("test1.xml", FileMode.Create, isoStore)) 
    { 
     xmlDoc.Save(isoStream); 
    } 
} 

はちょうどあなたが戻って分離ストレージからXMLファイルを読み込むときに、文字がまだ良好であることを確認してください。

+0

もう一度。私は同じ問題を発見したので書きましたが、IsolatedStorageFileStreamはutf8以外のエンコーディングを受け入れることに満足していません!!私はxmlヘッダーファイルのエンコーディングを手動で変更しました。XDocument doc = loadedDataISO; doc.Declaration.Encoding = "UTF-8"; XDocument loadedData = doc;あなたのソリューションはよりきれいでした! – Krst

+0

ありがとうございます。私は特別なキャラクターをメモリから読んだ後に失うことはありません。だから今はすべて動作しますが、おそらく彼らはmsdnにこれを追加してutf8以外を受け入れないようにしてください。これは非常に頻繁に英語以外の言語のユーザーに遭遇する必要がありますので、ここでこの問題を見つけていないことを奨励しましたか?もう一度、助けてくれてありがとう! – Krst

関連する問題