2015-01-12 3 views
-1

Я работаю над программным обеспечением стеганографии на C#, точнее для видеофайлов. Мой подход заключается в добавлении дополнительной информации в конец видеофайла. Однако сначала я должен прочитать весь видеофайл в памяти. Я использовал функцию File.ReadAllBytes() в C# для чтения видеофайла (видео около 200 МБ) в массив байтов. Затем я создаю новый массив с байтами видео и байтами моих данных. Но это иногда вызывает исключение OutOfMemoryException. И когда это не так, это очень медленно. Есть ли более эффективный способ добавления байтов в существующий файл на C#, который решит эту проблему? Спасибо.Добавление байтов в существующий файл C#

+2

указать код – giammin

+0

Загрузка 200 МБ-файла в память - неправильный подход (без учета одноразовых сценариев). Вместо этого вы должны использовать поток. – xxbbcc

+0

http://stackoverflow.com/questions/5958495/append-data-to-byte-array?rq=1 проверить это .. – mybirthname

ответ

2

Конечно, это легко:

using (var stream = File.Open(path, FileMode.Append)) 
{ 
    stream.Write(extraData); 
} 

Нет необходимости читать файл первым.

Я бы не стал классифицировать это как стеганографию - это потребует внесения тонких изменений в видеофрагменты, чтобы оно по-прежнему являлось действительным видео и выглядело одинаково для человеческого глаза, но дополнительные данные кодируются в этих кадрах, поэтому его можно извлечь позже.

4

Открыть файл с FileMode.Append

var stream = new FileStream(path, FileMode.Append) 

FileMode Enumeration

FileMode.Append:

Открывает файл, если он существует, и стремится к концу файла, или создает новый файл. Для этого требуется разрешение FileIOPermissionAccess.Append . FileMode.Append может использоваться только совместно с FileAccess.Write. Пытаться найти позицию до конца файла вызывает исключение IOException, и любая попытка прочитать сбой и генерирует исключение NotSupportedException.

0

попытка этого метода, я не уверен, что это даст более быстрые результаты, но логически это должно быть. : https://stackoverflow.com/a/6862460/2835725

+1

это больше комментарий! – mybirthname

+0

не может комментировать + он дает ответ. – user2835725

+1

Если вы не можете комментировать, это не значит, что вам следует отправить ответ, подходящий для [комментариев] (http://stackoverflow.com/help/privileges/comment). Кроме того, избегайте ссылок только на ответы. Подтвердите источник, но скопируйте соответствующий ответ/код здесь. Это также относится к дублированному вопросу, когда флаг был бы более уместным. – Reti43

 Смежные вопросы

  • Нет связанных вопросов^_^