С# Добавить массив байтов в существующий файл
Я хотел бы добавить массив байтов в уже существующий файл (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 постоянно бросается. Таким образом, я, скорее всего, придется разбить большой массив на части и добавить каждый массив байтов в конец файла.
Спасибо,
Эван
Ответы
Ответ 1
Одним из способов было бы создать 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);
}
}
Ответ 2
- Создайте новый
FileStream
.
-
Seek()
до конца.
-
Write()
байты.
-
Close()
поток.
Ответ 3
Вы также можете использовать встроенный FileSystem.WriteAllBytes Method (String, Byte[], Boolean)
.
public static void WriteAllBytes(
string file,
byte[] data,
bool append
)
Установите приложение True, чтобы добавить к содержимому файла; False, чтобы перезаписать содержимое файла. По умолчанию False.
Ответ 4
Я не совсем уверен, в чем вопрос, но у С# есть метод 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()
возвращает массив данных, которые необходимо добавить.
Ответ 5
вы можете просто создать функцию для этого
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();
}
}