C言語

【C言語】第7章第1回:ファイルの基本操作:開く、閉じる

ファイル操作は、データを永続的に保存したり、再利用するための基本スキルです。この章では、C言語を使ってファイルを開いたり閉じたりする基本操作を学びます。

0. 記事の概要

この記事を読むメリット

  • ファイル操作の基本を習得:データの保存や読み込みの基礎を学べます。
  • 応用力の向上:より高度なファイル操作に備えられます。
  • 実践的なスキル:プロジェクトで役立つファイル操作の知識を習得できます。

この記事で学べること

  • ファイルを開く方法とそのモード
  • ファイルを閉じる方法と注意点
  • ファイル操作における基本的なエラー処理

活用のイメージ

例えば、ログデータを記録したり、設定ファイルを読み込んだりする際に、ファイル操作のスキルが必要です。本記事では、その基礎をしっかりと身につけます。

1. ファイルの基本操作

1.1 ファイルの操作とは?

C言語でのファイル操作は、以下のプロセスで行われます。

  1. ファイルを開く:fopen()を使ってファイルを開きます。
  2. ファイルを操作する:ファイルにデータを読み書きします。
  3. ファイルを閉じる:fclose()を使ってファイルを閉じます。

1.2 ファイルを開く

ファイルを開くためには、fopen()関数を使用します。この関数は、以下の形式で使用します。

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

パラメータ:

  • filename:開きたいファイルの名前
  • mode:ファイルを開くモード(例:"r", "w", "a"
ファイルモードの例
モード意味
"r"読み取り専用
"w"書き込み専用(既存ファイルを上書き)
"a"追記専用
"r+"読み書き
"w+"読み書き(既存ファイルを上書き)
"a+"読み書き(追記)

1.3 ファイルを閉じる

ファイルを閉じるには、fclose()関数を使用します。開いたファイルを閉じることは、以下の理由で重要です。

  • メモリリークを防ぐ
  • データの損失を防ぐ
  • 他のプログラムがファイルにアクセスできるようにする
#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    fprintf(file, "Hello, World!\n");
    fclose(file); // ファイルを閉じる
    printf("File closed successfully.\n");

    return 0;
}

2. ファイル操作のエラー処理

2.1 ファイルが開けない場合の処理

ファイルが存在しない場合や、アクセス権限がない場合、fopen()NULLを返します。

#include <stdio.h>

int main() {
    FILE *file = fopen("nonexistent.txt", "r");
    if (file == NULL) {
        printf("Error: File not found or cannot be opened.\n");
        return 1;
    }
    fclose(file);
    return 0;
}

2.2 書き込みエラーの処理

書き込みエラーを防ぐためには、fprintf()の戻り値をチェックします。

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    if (fprintf(file, "Hello, World!\n") < 0) {
        printf("Error writing to file.\n");
    }
    fclose(file);
    return 0;
}

2.3 ファイルを閉じる際のエラー処理

fclose()の戻り値を確認し、エラーが発生した場合に適切に処理します。

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    fprintf(file, "Hello, World!\n");
    if (fclose(file) != 0) {
        printf("Error closing file.\n");
    }
    return 0;
}

3. 練習問題

以下の課題に挑戦して、ファイル操作のスキルを高めましょう。

  1. ファイルに文字列を複数行書き込むプログラムを作成してください。
  2. ファイルが存在しない場合にエラーメッセージを出力するプログラムを作成してください。
  3. ファイルの内容を読み取り、コンソールに出力するプログラムを作成してください。

4. 練習問題の解答と解説

問1の解答

#include <stdio.h>

int main() {
    FILE *file = fopen("output.txt", "w");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    fprintf(file, "Line 1: Hello, World!\n");
    fprintf(file, "Line 2: Learning C is fun!\n");
    fprintf(file, "Line 3: File handling is useful.\n");

    fclose(file);
    printf("File written successfully.\n");
    return 0;
}

5. まとめ

ファイルを開く、閉じるといった基本操作は、C言語でのプログラミングにおける重要なスキルです。次回は、ファイルへの書き込みや読み取りについてさらに詳しく学びます。