C#将字节数组附加到现有文件

36 c# arrays byte concatenation append

我想将一个字节数组附加到现有文件(C:\test.exe).假设以下字节数组:

byte[] appendMe = new byte[ 1000 ] ;

File.AppendAllBytes(@"C:\test.exe", appendMe); // Something like this - Yes, I know this method does not really exist.
Run Code Online (Sandbox Code Playgroud)

我会使用File.WriteAllBytes这样做,但我将使用一个ENORMOUS字节数组,并且不断抛出System.MemoryOverload异常.因此,我很可能不得不将大数组拆分成多个并将每个字节数组附加到文件的末尾.

谢谢,

埃文

Ani*_*Ani 59

一种方法是FileStream使用FileMode.Append创建模式创建.

打开文件(如果存在)并搜索文件的末尾,或创建新文件.

这看起来像是这样的:

public static void AppendAllBytes(string path, byte[] bytes)
{
    //argument-checking here.

    using (var stream = new FileStream(path, FileMode.Append))
    {
        stream.Write(bytes, 0, bytes.Length);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这看起来很完美。其他一些答案使用 BinaryWriter;为什么要选择这个而不是 FileStream 方法?我猜它执行完全相同的功能,但需要更多的代码行。 (4认同)
  • 需要冲洗吗? (2认同)

Meh*_*dad 6

  1. 创建一个新的FileStream.
  2. Seek() 到最后.
  3. Write() 字节.
  4. Close() 流.


Ham*_*med 5

您也可以使用内置功能FileSystem.WriteAllBytes Method (String, Byte[], Boolean).

public static void WriteAllBytes(
    string file,
    byte[] data,
    bool append
)
Run Code Online (Sandbox Code Playgroud)

设置追加为True以附加到文件内容; False覆盖文件内容.默认值为False.

  • 据我所知,这是一个仅限VB.Net的解决方案.https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.filesystem.writeallbytes(v=vs.110).aspx (3认同)