Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membaca dan Menulis Fail Binari dengan Cekap dalam C Sambil Mengelakkan Kehilangan Data?

Bagaimanakah Saya Boleh Membaca dan Menulis Fail Binari dengan Cekap dalam C Sambil Mengelakkan Kehilangan Data?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-11 11:45:12747semak imbas

How Can I Efficiently Read and Write Binary Files in C   While Avoiding Data Loss?

Manipulasi Fail Perduaan: Membaca dan Menulis

Dalam bidang pengaturcaraan, pengendalian fail binari boleh memberikan cabaran yang unik. Satu tugas biasa ialah membaca fail binari ke dalam penimbal dan seterusnya menulisnya ke fail lain. Walau bagaimanapun, pendekatan tertentu mungkin menghadapi had, yang berpotensi membawa kepada ketidakkonsistenan data.

Pernyataan Masalah

Salah satu pendekatan sedemikian melibatkan penggunaan penimbal tatasusunan char dan mengurus I/O fail secara manual operasi. Walau bagaimanapun, kaedah ini selalunya menghasilkan penimbal yang hanya menangkap beberapa aksara ASCII daripada baris pertama fail, menjadikan baki data tidak boleh diakses.

Penyelesaian untuk C

The Bahasa pengaturcaraan C menyediakan cara yang lebih mantap dan cekap untuk mencapai manipulasi fail binari. Kod berikut menunjukkan pendekatan yang dipertingkatkan:

#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));
}

Kod ini menggunakan kelas std::ifstream dan std::ofstream untuk operasi input dan output. Fungsi std::copy secara berkesan memindahkan keseluruhan kandungan fail input ke dalam fail output, mencerminkan data binarinya dengan lancar.

Penyelesaian Alternatif untuk Penimbalan

Jika anda memerlukan mengakses data binari dalam penimbal untuk pengubahsuaian sebelum menulisnya, pertimbangkan perkara berikut pendekatan:

#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), {});

}

Pendekatan ini menggunakan std::vector untuk mengumpul data binari, yang kemudiannya boleh diakses untuk pengubahsuaian jika dikehendaki sebelum menulisnya ke fail destinasi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membaca dan Menulis Fail Binari dengan Cekap dalam C Sambil Mengelakkan Kehilangan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn