讀取和寫入二進位檔案
讀取和寫入二進位檔案涉及處理原始數據,通常由表示各種類型數據的二進位代碼組成。一個常見的任務是將資料從二進位檔案讀取到緩衝區,然後將其寫入另一個檔案。
問題:
嘗試讀取和寫入二進位時使用以下程式碼建立檔案時,僅將檔案第一行中的幾個 ASCII字元儲存在buffer:
int length; char * buffer; ifstream is; is.open ("C:\Final.gif", ios::binary ); // get length of file: is.seekg (0, ios::end); length = is.tellg(); is.seekg (0, ios::beg); // allocate memory: buffer = new char [length]; // read data as a block: is.read (buffer,length); is.close(); FILE *pFile; pFile = fopen ("C:\myfile.gif", "w"); fwrite (buffer , 1 , sizeof(buffer) , pFile );
解決方案:
有兩種可能的方法來解決這個問題:
使用C 流:
此方法涉及使用C 標準函式庫提供的ifstream 和ofstream 類別。它允許高效且可移植的文件處理。
#include <fstream> #include <iterator> #include <algorithm> int main() { std::ifstream input( "C:\Final.gif", std::ios::binary ); std::ofstream output( "C:\myfile.gif", std::ios::binary ); std::copy( std::istreambuf_iterator<char>(input), std::istreambuf_iterator<char>( ), std::ostreambuf_iterator<char>(output)); }
使用緩衝區進行修改:
如果在將資料寫入緩衝區之前需要對其進行操作或修改文件,可以使用緩衝區來儲存它。
#include <fstream> #include <iterator> #include <vector> int main() { std::ifstream input( "C:\Final.gif", std::ios::binary ); // copies all data into buffer std::vector<unsigned char> buffer(std::istreambuf_iterator<char>(input), {}); }
以上是為什麼我的二進位檔案僅複製部分內容,如何修復?的詳細內容。更多資訊請關注PHP中文網其他相關文章!