2015-01-12 41 views
-1

我正在研究C#中的隱寫軟件,更精確地說是用於視頻文件。我的方法是在視頻文件的末尾添加額外的信息。但是,我必須先在內存中讀取整個視頻文件。我使用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 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