ファイル処理(テキストファイルの編集)

(ブログ記事の一覧は「こちら」)

ファイルのオープン/クローズの定義は以下のようになります。


ファイル名(filename)で示されるファイルを、指定モード(mode)でオープンする

FILE *fopen(const char *filename, const char *mode);

「FILE *」は、ファイルポインタというファイルを扱うときの型であるFILE型のポインタです。

テキストファイルについての、モード(mode)の基本的な種類については、以下の通りです。

モード 機能 ファイルが無い場合
"r" 読み込み エラー
"w" 書き込み 新規作成
"a" 追記 新規作成


fopen でオープンされたファイルをクローズする

int fclose(FILE *fp);

テキストファイルの読み込み

以下のプログラムは、プロジェクト直下にあるテキストファイル「test_r.txt」をオープンしてクローズするだけの処理を行っています。

まず、プロジェクト直下にテキストファイル「test_r.txt」を作成して、読み込むテキストを適当に入力してください。

テキストファイル「test_r.txt」が存在しない場合、ファイルポインタ「fp」はNULLとなります。

#include <stdio.h>

int main(void)
{
    // 読み込み用のテキストファイルを開く
    FILE *fp;
    fp = fopen("test_r.txt", "r");
    if (fp == NULL) {
        printf("file cannot open.\n");
        return -1;
    }

    // テキストファイルの読み込み
    int chr;
    while ((chr = fgetc(fp)) != EOF) {
        printf("%c", chr);
    }

    // テキストファイルを閉じる
    fclose(fp);

    return 0;
}

テキストファイルの読み込みはfgetc関数を使用します。1文字ずつ読み出します。

テキストファイルへの書き込み

以下のプログラムは、プロジェクト直下にテキストファイル「test_w.txt」をオープンしてクローズするだけの処理を行っています。

その結果、プロジェクト直下に、空の(何も書かれていない)テキストファイル「test_w.txt」が作成されます。

#include <stdio.h>

int main(void)
{
    // 書き込み用のテキストファイルを開く
    FILE *fp;
    fp = fopen("test_w.txt", "w");
    if (fp == NULL) {
        printf("file cannot open.\n");
        return -1;
    }

    // テキストファイルへの書き込み
    fprintf(fp, "こんにちは!\n"); 
    fprintf(fp, "お元気ですか?\n"); 

    // テキストファイルを閉じる
    fclose(fp);

    return 0;
}

テキストファイルの書き込みはfprintf関数を使用します。

テキストファイルのコピー

テキストファイルのコピーは、テキストファイルの読み込みと書き込みを行うことで実現できます。

以下の例では、テキストファイル「test_r.txt」の内容を読み取り、「test_cp.txt」に書き込むことでコピーを行っています。

#include <stdio.h>

int main(void)
{
    // 読み込み用のテキストファイルを開く
    FILE *fp1;
    fp1 = fopen("test_r.txt", "r");
    if (fp1 == NULL) {
        printf("file cannot open.\n");
        return -1;
    }
    // 書き込み用のテキストファイルを開く
    FILE *fp2;
    fp2 = fopen("test_cp.txt", "w");
    if (fp2 == NULL) {
        printf("file cannot open.\n");
        return -1;
    }

    // テキストファイルの読み込み
    int chr;
    while ((chr = fgetc(fp1)) != EOF) {
        // テキストファイルの書き込み
        fputc(chr, fp2);
    }

    // テキストファイルを閉じる
    fclose(fp1);
    fclose(fp2);

    return 0;
}

読み込み用のテキストファイルからfgetc関数で1文字ずつ読み出したデータを、書き込み用のテキストファイルにfputc関数で1文字ずつ書き込みます。