2012-10-15 38 views
0

嗨我試圖將xml保存到一個文件,並且它在文件的開始處不斷添加不同的字符。二進制編寫器在寫入時插入額外的字符

代碼,我是

string strCXML2; 

strCXML2 = "<input type=" + "\"" + "hidden" + "\"" + " name=" + "\"" + "cxml-urlencoded" + "\"" + " value=" + "\""; 
strCXML2 = strCXML2 + "<!DOCTYPE cXML SYSTEM " + "\"" + "http://xml.cxml.org/schemas/cXML/1.2.023/cXML.dtd" + "\"" + ">"; 

//<snip> 

BinaryWriter bw5 = new BinaryWriter(File.Open(Server.MapPath("~/data/test/test19.xml"), FileMode.OpenOrCreate)) 
bw5.Write(strCXML2); 
bw5.Close(); 

此返回按照xml文件「}」在每一個它是一些其他垃圾字符

}<input type="hidden" name="cxml-urlencoded" value="<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.023/cXML.dtd"> 

任何想法,爲什麼它是這樣做的時候開始呢?

+0

嘗試在那裏指定編碼方法 –

+0

您接受的答案一直在尋找,但似乎無法找到它 – user1108282

+0

當您登錄時,您問的每個問題答案的左側都會出現一個幽靈般的滴答聲。點擊最適合您的問題的答案,以便它變得可靠。 –

回答

5

正在寫入的字符是字符串的編碼長度,因爲:它不期望寫入文本文件。 BinaryWriter寫入... 二進制。它以編碼的二進制方式寫入字符串,它可以用BinaryReader.ReadString回讀。

相反,只使用:

File.WriteAllText(path, strCXML2); 

BinaryWriter.Write(string)方法的文檔解釋這一切:

長度前綴字符串由前綴字符串一個字節或字表示字符串長度包含該字符串的長度。此方法首先將字符串的長度寫爲UTF-7編碼的無符號整數,然後使用BinaryWriter實例的當前編碼將許多字符寫入流中。

和,有益,鏈接到一個單獨的部分約writing text files

0

如果你想使用BinaryWriter,首先對其進行編碼,以ASCII或Unicode UTF-16。你的XML應該指定它使用的編碼,爲二進制編寫器使用特定的編碼。

byte[] textbyte = Encoding.Unicode.GetBytes(text);` 

這應該刪除前兩個垃圾字符。 我建議使用WriteAllText()方法。

如果您需要在textfile(offset)的特定區域中寫入,請使用Binarywriter