.net の MemoryStream で失敗…
FTPからXMLデータを取得して、XDocumentで解析させるプログラムを作ってます。 で、MemoryStream クラスからデータを取得する箇所でへんな事が起きました。 エラーメッセージ:"'.' (16 進数値 0x00) は無効な文字です。"(最後の行の最後の文字の部分) ソースコード: String readXml = Encoding.GetEncoding(932).GetString(memoryStream.GetBuffer()); result = XDocument.Parse(readXml); 何だ!?と思ってファイルを開いても何も問題なし。普通に読み込めます。 ためしに、ファイルをローカルにコピーしてファイルを読み込ませても問題無し… えぇ!と思い、デバッグしてデータを虫眼鏡マークで表示させても問題があるようには見えない… ふとマウスカーソルでツールチップが表示されたので、最後の方にカーソルを移動させると… \0 のオンパレード…出るわ出るわ… ・・・ \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 コイツが原因かっ!!!! で、ネットをあさってみると、英語のサイトばかり(笑) 結果、下記のように修正しました。 String readXml = Encoding.GetEncoding(932).GetString(memoryStream.ToArray()); result = XDocument.Parse(readXml); ToArray() を使うことにより、\0 が付与される事が無くなりました。 こんなの.netのバグダロウッ!と言いたくなります。 味噌は、 ファイルの最後(改行コード)の部分でエラーが発生したとエラーメッセージが出る所 です。 MemoryStream クラスで、GetBufferメソッドは使っちゃダメですっ! ちなみに、必ずなるわけじゃなく、「なることがある」って事です。 ちなみに、こんなコード書かないでね♪ readXml.Replace("\0", string.Empty) 検索用:...