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

问题描述 投票:0回答:6

我想将一个字节数组附加到已经存在的文件中

(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.

我会使用 File.WriteAllBytes 来完成此操作,但我将使用一个巨大的字节数组,并且不断抛出 System.MemoryOverload 异常。因此,我很可能必须将大数组分成几部分,并将每个字节数组附加到文件末尾。

谢谢你,

埃文

c# arrays byte append concatenation
6个回答
91
投票

一种方法是使用

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);
    }
}

6
投票
  1. 创建一个新的
    FileStream
  2. Seek()
    到最后
  3. Write()
    字节。
  4. Close()
    直播。

6
投票

您还可以使用内置的

FileSystem.WriteAllBytes Method (String, Byte[], Boolean)

public static void WriteAllBytes(
    string file,
    byte[] data,
    bool append
)

设置append为True即可追加到文件内容; False 覆盖文件内容。默认为 False。


3
投票

我不太确定问题是什么,但 C# 有一个

BinaryWriter
方法,它需要一个字节数组。

BinaryWriter(字节[])

bool writeFinished = false;
string fileName = "C:\\test.exe";
FileStream fs = new FileString(fileName);
BinaryWriter bw = new BinaryWriter(fs);
int pos = fs.Length;
while(!writeFinished)
{
   byte[] data = GetData();
   bw.Write(data, pos, data.Length);
   pos += data.Length;
}

当所有数据都已附加时,

writeFinished
为 true,并且
GetData()
返回要附加的数据数组。


0
投票

您可以简单地创建一个函数来执行此操作

public static void AppendToFile(string fileToWrite, byte[] DT)
{
    using (FileStream FS = new FileStream(fileToWrite, File.Exists(fileToWrite) ? FileMode.Append : FileMode.OpenOrCreate, FileAccess.Write)) {
        FS.Write(DT, 0, DT.Length);
        FS.Close();
    }
}

0
投票

使用 MemoryStream 的替代方法:

public static byte[] GetLargeBytes(byte[] bytes)
{
    using (var stream = new MemoryStream(new byte[1024 * 1024 * 10], true))
    {
        stream.Write(bytes);
        stream.Position = 0;
        return stream.ToArray();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.