Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在连接文件时,字节顺序标记会突然出现?_C#_.net_Byte Order Mark - Fatal编程技术网

C# 为什么在连接文件时,字节顺序标记会突然出现?

C# 为什么在连接文件时,字节顺序标记会突然出现?,c#,.net,byte-order-mark,C#,.net,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

我有一个包含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();
}
那么序列就不会出现


我是如何将文件读写为二进制文件并注入一些字节序列的?

您的原始文件中有BOM。
File.ReadAllBytes()
像任何其他字节一样,忠实地返回这些字节


File.ReadAllText()
将字节解析为UTF8,剥离BOM表。

原始文件中包含BOM表。
File.ReadAllBytes()
像任何其他字节一样,忠实地返回这些字节


File.ReadAllText()
将字节解析为UTF8,剥离BOM表。

如何验证BOM表不在输入文件中?我敢打赌是的,无论你用什么来检查,都是将其剥离出来……你如何验证BOM不在输入文件中?我敢打赌是的,无论你用什么方法来检查,都会将其剥离出来……交易是标记不会出现在结果的开头和结尾-只出现在结果的内部。@sharptooth:如果中间文件有标记,就会发生这种情况。在hex editor.Ouch中打开原始文件。事实上,第一个文件没有标记,而所有其他文件都有标记。关键是标记不出现在结果的开头和结尾-只出现在结果内部。@sharptooth:如果只有中间的文件有标记,就会出现这种情况。在hex editor.Ouch中打开原始文件。实际上,第一个文件没有标记,而所有其他文件都有标记。