我有一个包含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();
}
我看到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();
}
然后序列没有出现。
我是如何以二进制方式读取和写入文件并注入一些字节序列的呢?
答案 0 :(得分:5)
原始文件中包含物料清单。
File.ReadAllBytes()
忠实地返回那些字节,就像任何其他字节一样。
File.ReadAllText()
将字节解析为UTF8,剥离BOM。