Rumah >pembangunan bahagian belakang >C++ >Mengapa Fail Binari Saya Menyalin Sebahagian Sahaja, dan Bagaimana Saya Boleh Membetulkannya?
Membaca dan Menulis Fail Perduaan
Membaca dan menulis fail binari melibatkan kerja dengan data mentah, selalunya terdiri daripada kod binari yang mewakili pelbagai jenis data . Satu tugas biasa ialah membaca data daripada fail binari ke dalam penimbal dan kemudian menulisnya ke fail lain.
Masalah:
Apabila cuba membaca dan menulis binari menggunakan kod berikut, hanya beberapa aksara ASCII daripada baris pertama fail disimpan dalam fail penimbal:
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 );
Penyelesaian:
Terdapat dua cara yang mungkin untuk menyelesaikan isu ini:
Menggunakan strim C:
Kaedah ini melibatkan penggunaan kelas ifstream dan ofstream yang disediakan oleh perpustakaan standard C. Ia membolehkan pengendalian fail yang cekap dan mudah alih.
#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)); }
Menggunakan penimbal untuk pengubahsuaian:
Jika data perlu dimanipulasi atau diubah suai sebelum menulisnya ke fail, penimbal boleh digunakan untuk menyimpannya.
#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), {}); }
Atas ialah kandungan terperinci Mengapa Fail Binari Saya Menyalin Sebahagian Sahaja, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!