2015-01-12 3 views
-1

저는 C#의 steganography 소프트웨어,보다 정확하게는 비디오 파일 작업을하고 있습니다. 내 접근 방식은 비디오 파일의 끝에 추가 정보를 추가하는 것입니다. 그러나 먼저 전체 비디오 파일을 메모리에서 읽어야합니다. C#에서 File.ReadAllBytes() 함수를 사용하여 비디오 파일 (약 200MB 비디오)을 바이트 배열로 읽습니다. 그런 다음 비디오의 바이트와 데이터의 바이트로 새로운 배열을 만듭니다. 그러나, 때때로 OutOfMemoryException이 발생합니다. 그리고 그렇지 않을 때는 매우 느립니다. 이 문제를 해결할 C#의 기존 파일에 바이트를 추가하는 효율적인 방법이 있습니까? 고맙습니다.기존 파일에 바이트 추가 C#

+2

코드 제공 – giammin

+0

200MB 파일을 메모리에로드하는 것은 잘못된 접근 방식입니다 (일회성 시나리오 무시). 대신 스트림을 사용해야합니다. – 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.APPEND

FileMode Enumeration

: 그것은 존재하고 파일의 끝에 추구, 또는 이를 만드는 경우

파일을 엽니 다 새로운 파일. 이 경우 FileIOPermissionAccess.Append 권한이 필요합니다. FileMode.Append는 FileAccess.Write와 결합해서 만 사용할 수 있습니다. 파일 끝나기 전에 위치 찾기를 시도하면 IOException 예외가 발생하고 읽으려고하면 이 실패하고 NotSupportedException 예외가 throw됩니다.

0

이 방법을 시도하면 더 빠른 결과를 얻을 수 있는지 확실하지 않지만 논리적으로해야합니다. : https://stackoverflow.com/a/6862460/2835725

+1

이것은 더 많은 코멘트입니다! – mybirthname

+0

댓글이 없습니다 + 답을 제공합니다. – user2835725

+1

댓글을 달 수없는 경우 [코멘트] (http://stackoverflow.com/help/privileges/comment)에 적합한 답변을 게시해야한다는 의미는 아닙니다. 또한 링크 전용 답변을 피하십시오. 소스를 확인하고 여기에 관련 답변/코드를 복사하십시오. 이것은 또한 플래그가 더 적절한 중복 질문의 경우입니다. – Reti43

관련 문제