C++ でのバイナリ ファイル操作とサンプル コード

王林
リリース: 2023-08-22 15:39:18
オリジナル
2169 人が閲覧しました

C++ でのバイナリ ファイル操作とサンプル コード

C でのバイナリ ファイル操作とサンプル コード

C では、バイナリ ファイルはバイナリ形式で保存されたファイルであり、整数、浮動小数点数など、あらゆる種類のデータを含めることができます。ポイント番号、文字、構造体などを保存し、これらのバイナリ ファイルを読み書きすることもできます。この記事では、C でのバイナリ ファイル操作を紹介し、バイナリ ファイル操作をよりよく理解して使用するのに役立つサンプル コードをいくつか紹介します。

  1. ファイルを開く

C では、fstream ライブラリのファイル ストリーム オブジェクトを使用してファイルを開くことができます。ファイルを操作する前にファイルを開く必要があります。開く方法は大きく分けて、入力(ファイル読み込み)と出力(ファイル書き込み)の2つの方法があり、以下のとおりです。

  • 入力方法:
ifstream fin;   //定义一个输入文件流对象
fin.open("test.txt", std::ios::binary);  //打开文件
if (!fin.is_open()) {
    std::cerr << "The file can not be opened.
";    //打开失败处理
    exit(EXIT_FAILURE);
}
ログイン後にコピー

このうち, ifstream は入力ファイル ストリーム オブジェクトです。open は 2 つのパラメータを受け入れることができます: 最初のパラメータはファイル名で、2 番目のパラメータはファイルを開くモードです。バイナリ モードここでは が使われています。オープンに失敗した場合、エラー メッセージが標準エラー ストリームに出力され、exit 関数を使用してプログラムが終了します。

  • 出力メソッド:
ofstream fout;  //定义一个输出文件流对象
fout.open("test.bin", std::ios::binary); //创建文件
if (!fout.is_open()) {
    std::cerr << "The file can not be created.
";   //创建失败处理
    exit(EXIT_FAILURE);
}
ログイン後にコピー

同様に、ofstream は出力ファイル ストリーム オブジェクトであり、open 関数は次のこともできます。 2 つのパラメータを受け入れます。ここでのオープン方法はファイルの作成ですが、作成に失敗した場合は標準エラーストリームにエラーメッセージが出力され、exit関数を使用してプログラムが終了します。

  1. Read File

次のように read 関数を使用してバイナリ ファイルからデータを読み取ることができます:

struct Student {
    char name[20];
    int age;
    float score;
};

Student stu;
fin.read((char*)&stu, sizeof(stu));
ログイン後にコピー

read関数は 2 つのパラメータを受け入れることができます: 最初のパラメータは文字ポインタ タイプで、データを読み取る必要があるメモリ アドレスを指します。2 番目のパラメータは読み取る必要があるデータ バイト数です。ここで、読み取ったデータはメモリを割り当てられた変数に書き込む必要があることに注意してください。そうしないとプログラムが異常終了します。 「&」記号を使用してメモリ アドレスを取得し、バイナリ ファイル内の char 配列を読み取るために char ポインタへの型変換を強制します。

  1. ファイルの書き込み

write 関数を使用して、次のようにバイナリ ファイルにデータを書き込むことができます:

struct Student {
    char name[20];
    int age;
    float score;
};

Student stu = {"Alice", 18, 85.5};
fout.write((char*)&stu, sizeof(stu));
ログイン後にコピー

write 関数の は、同じく 2 つのパラメータを持つ read 関数に似ています。最初のパラメータは文字ポインタ タイプで、データを書き込む必要があるメモリ アドレスを指します。2 番目のパラメータは書き込む必要があるデータ バイト数です。 「&」記号を使用してメモリ アドレスを取得し、char ポインタへの型変換を強制してバイナリ ファイルに char 配列を書き込みます。

  1. ファイルを閉じる

ファイルに対する操作が完了したら、ファイルが他のプログラムによって占有されないようにするために、ファイルを閉じてシステム リソースを解放する必要があります。以下に示すように:

fin.close();
fout.close();
ログイン後にコピー

close 関数を使用して、ファイル ストリームを閉じ、ファイル キャッシュをクリアできます。もちろん、プログラムが異常終了した場合には、ファイルを閉じる操作も自動的に呼び出されます。

  1. 完全なサンプル コード

次に、バイナリ ファイルの読み取りと書き込みのための完全なサンプル コードを示します。これは、データ読み取りおよび書き込みオブジェクトとして構造体タイプを定義します。 ##

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

struct Student {
    char name[20];
    int age;
    float score;
};

int main() {

    // 创建一个存储二进制文件的fstream对象fout,并打开test.bin文件
    ofstream fout;
    fout.open("test.bin", std::ios::binary);
    if (!fout.is_open()) {
        cerr << "The file can not be created." << endl;
        exit(EXIT_FAILURE);
    }

    // 向test.bin文件中写入二进制数据
    Student stu1 = {"Alice", 18, 85.5};
    Student stu2 = {"Bob", 20, 90.0};
    fout.write((char*)&stu1, sizeof(stu1));
    fout.write((char*)&stu2, sizeof(stu2));
    fout.close();

    // 打开存储二进制文件的fstream对象fin,并读取test.bin文件
    ifstream fin;
    fin.open("test.bin", std::ios::binary);
    if (!fin.is_open()) {
        cerr << "The file can not be opened." << endl;
        exit(EXIT_FAILURE);
    }

    // 从test.bin文件中读取数据,并输出到屏幕
    Student stu3, stu4;
    fin.read((char*)&stu3, sizeof(stu3));
    fin.read((char*)&stu4, sizeof(stu4));
    cout << stu3.name << ", " << stu3.age << ", " << stu3.score << endl;
    cout << stu4.name << ", " << stu4.age << ", " << stu4.score << endl;
    fin.close();

    return 0;
}
ログイン後にコピー
    概要
バイナリ ファイル操作は C の非常に便利な方法であり、あらゆる種類のデータの読み書きができ、また、データの正確性を保証できます。データは失われません。実際のアプリケーションでは、必要に応じて柔軟に使用して、プログラムの効率とデータ処理能力を向上させることができます。

以上がC++ でのバイナリ ファイル操作とサンプル コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!