3

ファイルを出力ファイルにマージしようとしていますが、個々のファイルに BOM が含まれています。Stream.CopyTo メソッドを使用しているときに BOM を削除するにはどうすればよいですか

私のコードは次のようになります。

using (var output = File.Open(outputFile,FileMode.Append,FileAccess.Write))
      {
         foreach (var inputFile in inputFiles)
         {
           using (var input = File.OpenRead(inputFile))
           {
              input.CopyTo(output);
           }
         }
      }
4

3 に答える 3

7

次の方法を使用してください。

using (var output = File.Open(outputFile,FileMode.Append,FileAccess.Write))
      {
         foreach (var inputFile in inputFiles)
         {
           using (var input = File.OpenRead(inputFile))
           {
               input.Position = Encoding.Unicode.GetPreamble().Length;  //The encoding might be any type.
              input.CopyTo(output);
           }
         }
      }
于 2012-05-15T05:48:59.830 に答える
0

任意のファイルに対してそれを行うことはできません。BOM は、完全に有効なエンコーディングである数バイトです。以下の例では、コードはたまたま UTF-16 でエンコードされたテキスト「ABC」と同じバイトを含むファイルをリトルエンディアンで BOM とともに書き込みますが、最初の 2 バイトが BOM を表すという意味ではありません。 (または、ファイルが「ABC」を表していることさえあります)。

public class StackOverflow_10594371
{
    public static void Test()
    {
        using (FileStream fs = File.Create("a.bin"))
        {
            fs.WriteByte(0xFF);
            fs.WriteByte(0xFE);
            fs.WriteByte(0x41);
            fs.WriteByte(0x00);
            fs.WriteByte(0x42);
            fs.WriteByte(0x00);
            fs.WriteByte(0x43);
            fs.WriteByte(0x00);
        }

        Console.WriteLine(File.ReadAllText("a.bin"));
    }
}
于 2012-05-15T05:48:24.593 に答える