出力ファイル・オープンフラグ

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

C++では、ファイルへの出力(書き込み)も、入力(読み込み)同様に可能です。
ファイルのデータを入力(読み込み)/iostream・fstreamで、使ったデータファイルを用いて、読み込んだファイルのデータを、別のファイルを作成して書き込むコードを見てみます。

スポンサーリンク

numbers.dat

12 34
56
345  45677
7867 11     456

プログラム本体。
numbers.datから、数字を読み込んで、data.logという新しいファイルを作成し、data.logに書き込み(出力)を行います。
std::ofstreamでは、出力ファイルのフラグ(オープンフラグ)を設定できます。

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <assert.h>
 
// 数字を受け取り、data.logファイルに書き込むルーチン
void output(const int& number) {
    std::ofstream out_file("data.log",
        std::ios::out|std::ios::app|std::ios::ate);
        // 以下オープンフラグ
        // std::ios::out ファイルを出力モードでオープン
        // std::ios::app 出力ファイルの末尾にデータ追加
        // std::ios::ate ファイルのオープン時にファイルの末尾に移動
    if (out_file.fail())
        return;
    out_file << number << std::endl;
}
 
int main() {
    const int DATA_SIZE = 8;    // データ数
    int data_array[DATA_SIZE];    // データ
    std::ifstream data_file("numbers.dat");    // 入力ファイル
    int i;
 
    if (data_file.fail()) {
        std::cerr << "Error: Could not open\n";
        exit (8);
    }
 
    for (i = 0; i < DATA_SIZE; ++i) {
        assert(i >= 0);
        assert(i < static_cast<int>(sizeof(data_array)/sizeof(data_array[0])));
        data_file >> data_array[i];
    }
 
    int total;    // 数値の合計
 
    total = 0;
    for (i = 0; i < DATA_SIZE; ++i) {
        assert(i >= 0);
        assert(i < static_cast<int>(sizeof(data_array)/sizeof(data_array[0])));
 
        // numbers.datから読み込まれたデータをdata.logファイルに書き込む
        output(data_array[i]);
    }
 
    return 0;
}

このプログラムを実行した結果、同じディレクトリ(フォルダ)にdata.logという名前のファイルが作成されることを確認できます。
そして、data.logをテキストエディタで開いて確認しますと・・・

12
34
56
345
45677
7867
11
456

と、numbers.datから読み込まれた数字が、書き込まれていることを確認できます。

スポンサーリンク
 
スポンサーリンク