首頁 > 後端開發 > C++ > 為什麼我的二進位檔案僅複製部分內容,如何修復?

為什麼我的二進位檔案僅複製部分內容,如何修復?

Linda Hamilton
發布: 2024-12-14 00:06:11
原創
406 人瀏覽過

Why Does My Binary File Copy Only Partially, and How Can I Fix It?

讀取和寫入二進位檔案

讀取和寫入二進位檔案涉及處理原始數據,通常由表示各種類型數據的二進位代碼組成。一個常見的任務是將資料從二進位檔案讀取到緩衝區,然後將其寫入另一個檔案。

問題:

嘗試讀取和寫入二進位時使用以下程式碼建立檔案時,僅將檔案第一行中的幾個 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板