sha*_*oth 0 .net c# byte-order-mark
我有一个包含XML文件的文件夹,我需要将它们合并到一个文件中.当我尝试这个:
var allFiles = Directory.GetFiles(path, "*.xml");
String result = Path.Combine( path, "merged.xml" );
using( var stream = new FileStream( result, FileMode.Create, FileAccess.Write ) ) {
foreach( var file in allFiles ) {
var fileContents = File.ReadAllBytes( file );
stream.Write( fileContents , 0, fileContents.Length );
}
stream.Close();
}
Run Code Online (Sandbox Code Playgroud)
我看到0xEF 0xBB 0xBF(字节顺序标记)序列出现在任何两个文件的内容之间的结果文件中,但不出现在文件的开头而不是文件的末尾.
如果我StreamWriter改用:
var allFiles = Directory.GetFiles(path, "*.xml");
String result = Path.Combine( path, "merged.xml" );
using( var stream = new FileStream( result, FileMode.Create, FileAccess.Write ) ) {
using( var writer = new StreamWriter( stream ) ) {
foreach( var file in allFiles ) {
var fileText = File.ReadAllText( file );
writer.Write( fileText );
}
}
stream.Close();
}
Run Code Online (Sandbox Code Playgroud)
那么序列就不会出现了.
我是如何读取和写入二进制文件并注入一些字节序列的?
您的原始文件中包含BOM.
File.ReadAllBytes()忠实地返回那些字节,就像任何其他字节一样.
File.ReadAllText() 将字节解析为UTF8,剥离BOM.