C # Добавить байтовый массив в существующий файл - PullRequest
35 голосов
/ 28 июля 2011

Я хотел бы добавить массив байтов к уже существующему файлу (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, но я собираюсь использовать байтовый массив ENORMOUS, и постоянно выдается исключение System.MemoryOverload.Поэтому мне, скорее всего, придется разбить большой массив на части и добавить каждый байтовый массив в конец файла.

Спасибо,

Эван

Ответы [ 5 ]

57 голосов
/ 28 июля 2011

Один из способов - создать 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 голосов
/ 28 июля 2011
  1. Создайте новый FileStream.
  2. Seek() до конца.
  3. Write() байтов.
  4. Close() потока.
5 голосов
/ 06 октября 2015

Вы также можете использовать встроенный FileSystem.WriteAllBytes Method (String, Byte[], Boolean).

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

Установить добавление к True , чтобы добавить к содержимому файла; False для перезаписи содержимого файла. По умолчанию установлено значение False.

3 голосов
/ 28 июля 2011

Я не совсем уверен, в чем вопрос, но в C # есть метод BinaryWriter, который принимает массив байтов.

BinaryWriter (Byte [])

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 - истина, когда все данные добавлены, а GetData() возвращает массив данных для добавления.

0 голосов
/ 16 февраля 2016

Вы можете просто создать функцию для этого

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