Я работаю над программным обеспечением стеганографии на C#, точнее для видеофайлов. Мой подход заключается в добавлении дополнительной информации в конец видеофайла. Однако сначала я должен прочитать весь видеофайл в памяти. Я использовал функцию File.ReadAllBytes() в C# для чтения видеофайла (видео около 200 МБ) в массив байтов. Затем я создаю новый массив с байтами видео и байтами моих данных. Но это иногда вызывает исключение OutOfMemoryException. И когда это не так, это очень медленно. Есть ли более эффективный способ добавления байтов в существующий файл на C#, который решит эту проблему? Спасибо.Добавление байтов в существующий файл C#
ответ
Конечно, это легко:
using (var stream = File.Open(path, FileMode.Append))
{
stream.Write(extraData);
}
Нет необходимости читать файл первым.
Я бы не стал классифицировать это как стеганографию - это потребует внесения тонких изменений в видеофрагменты, чтобы оно по-прежнему являлось действительным видео и выглядело одинаково для человеческого глаза, но дополнительные данные кодируются в этих кадрах, поэтому его можно извлечь позже.
Открыть файл с FileMode.Append
var stream = new FileStream(path, FileMode.Append)
FileMode.Append:
Открывает файл, если он существует, и стремится к концу файла, или создает новый файл. Для этого требуется разрешение FileIOPermissionAccess.Append . FileMode.Append может использоваться только совместно с FileAccess.Write. Пытаться найти позицию до конца файла вызывает исключение IOException, и любая попытка прочитать сбой и генерирует исключение NotSupportedException.
попытка этого метода, я не уверен, что это даст более быстрые результаты, но логически это должно быть. : https://stackoverflow.com/a/6862460/2835725
это больше комментарий! – mybirthname
не может комментировать + он дает ответ. – user2835725
Если вы не можете комментировать, это не значит, что вам следует отправить ответ, подходящий для [комментариев] (http://stackoverflow.com/help/privileges/comment). Кроме того, избегайте ссылок только на ответы. Подтвердите источник, но скопируйте соответствующий ответ/код здесь. Это также относится к дублированному вопросу, когда флаг был бы более уместным. – Reti43
указать код – giammin
Загрузка 200 МБ-файла в память - неправильный подход (без учета одноразовых сценариев). Вместо этого вы должны использовать поток. – xxbbcc
http://stackoverflow.com/questions/5958495/append-data-to-byte-array?rq=1 проверить это .. – mybirthname