C # Добавить массив байтов в существующий файл
Я хотел бы добавить массив байтов в уже существующий файл (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 постоянно бросается. Поэтому мне, скорее всего, придется разбить массив на куски и добавить каждый массив байтов в конец файла.
Спасибо,
Evan
Один из способов – создать FileStream
с FileMode.Append
создания 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); } }
- Создайте новый
FileStream
. -
Seek()
до конца. -
Write()
байты. -
Close()
stream.
Вы также можете использовать встроенный FileSystem.WriteAllBytes Method (String, Byte[], Boolean)
.
public static void WriteAllBytes( string file, byte[] data, bool append )
Установите приложение « Истина» для добавления к содержимому файла; False, чтобы перезаписать содержимое файла. Значение по умолчанию – False.
Я не совсем уверен, в чем вопрос, но у 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; }
в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()
возвращает массив данных, которые будут добавлены.
вы можете просто создать функцию для этого
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(); } }