二进制编写器以书面形式插入额外字符

use*_*282 0 .net c# xml

嗨,我正在尝试将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();
Run Code Online (Sandbox Code Playgroud)

每次在某个其他垃圾角色时,它会在xml"}"中返回以下文件

}<input type="hidden" name="cxml-urlencoded" value="<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.023/cXML.dtd">
Run Code Online (Sandbox Code Playgroud)

任何想法为什么这样做?

Mar*_*ell 5

它所写的字符是字符串的编码长度,因为:它不期望写一个文本文件.BinaryWriter写... 二进制.它以编码的二进制方式写入字符串,它可以回读BinaryReader.ReadString.

相反,只使用:

File.WriteAllText(path, strCXML2);
Run Code Online (Sandbox Code Playgroud)

BinaryWriter.Write(string)方法的文档解释了所有这些:

带长字符的字符串表示字符串长度,方法是在字符串前面加上包含该字符串长度的单个字节或单词.此方法首先将字符串的长度写为UTF-7编码的无符号整数,然后使用BinaryWriter实例的当前编码将该多个字符写入流中.

并且,有帮助地,链接到关于编写文本文件的单独部分