Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語でのファイル処理の基本|書き込み・読み込み・追記のやり方を解説

C言語におけるファイル処理は、プログラムがデータを永続的に保存・活用するための重要な基礎技術です。この記事では、C言語でよく使われる基本的なファイル操作を、サンプルコードと実行結果とともにわかりやすく解説します。

ここで紹介する主なファイル操作は以下の3つです。

  • ファイルへの書き込み(Write)
  • ファイルからの読み込み(Read)
  • ファイルへの追記(Append)

1. ファイルへの書き込み

まずは、新しいファイルを作成してテキストを書き込む方法です。ファイルを開く際には fopen() 関数を使用し、モードとして "w"(書き込みモード)を指定します。なお、"w" モードで既存のファイルを開くと、中身は上書きされる点に注意してください。

サンプルコード

#include <stdio.h>
int main() {
    FILE *fp;
    char *filename = "sample.txt";
    char *content = "Hey there! You've successfully created a file with content in c programming language.";
    /* 書き込みモードで開く */
    fp = fopen(filename, "w");
    if( fp == NULL ) {
        printf("%s: failed to open. \n", filename);
        return -1;
    } else {
        printf("%s: opened in write mode.\n", filename);
    }
    /* ファイルに内容を書き込む */
    fprintf(fp, "%s\n", content);
    if( !fclose(fp) )
        printf("%s: closed successfully.\n", filename);
    return 0;
}

実行結果

sample.txt: opened in write mode.
sample.txt: closed successfully.

このコードでは、fopen() の戻り値が NULL かどうかを必ずチェックしています。ファイルが開けなかった場合にエラー処理を行うことは、堅牢なプログラムを書くうえで非常に重要です。また、作業が終わったら fclose() でファイルを確実に閉じましょう。

2. ファイルからの読み込み

次に、既存のファイルから内容を読み出して表示する方法を見ていきます。読み込みには "r"(読み取り専用モード)を使用し、fgetc() を使って1文字ずつデータを取得します。EOF(End Of File)に到達するまでループを回すのが定番のパターンです。

あらかじめ、以下の内容で file_read.txt を作成しておいてください。

You have opened a file using C programming language, in read-only mode.

サンプルコード

#include <stdio.h>
int main() {
    FILE *fp;
    char *filename = "file_read.txt";
    char ch;
    /* 読み取りモードで開く */
    fp = fopen(filename, "r");
    if (fp == NULL) {
        printf("%s does not exists \n", filename);
        return -1;
    } else {
        printf("%s: opened in read mode.\n\n", filename);
    }
    while ((ch = fgetc(fp) )!= EOF) {
        printf ("%c", ch);
    }
    if (!fclose(fp))
        printf("\n%s: closed.\n", filename);
    return 0;
}

実行結果

file_read.txt: opened in read mode.
You have opened a file using C programming language, in read-only mode.
file_read.txt: closed.

指定したファイルが存在しない場合、fopen()NULL を返すため、「ファイルが存在しません」というメッセージを表示して処理を終了します。

3. ファイルへの追記

最後に、既存ファイルの内容を消さずに、末尾へ新しい行を追加する方法を紹介します。これには "a"(追記モード)を使用します。"w" モードと違い、"a" モードでは元の内容が保持され、常にファイルの末尾にデータが追加されます。

あらかじめ、以下の内容で file_append.txt を作成しておきます。

This text was already there in the file.

サンプルコード

この例では、①現在のファイル内容を表示 → ②追記モードで開いて文字列を追加 → ③再度内容を表示して確認、という流れで処理を行います。

#include <stdio.h>
int main() {
    FILE *fp;
    char ch;
    char *filename = "file_append.txt";
    char *content = "This text is appeneded later to the file, using C programming.";
    /* 現在の内容を読み取って表示 */
    fp = fopen(filename, "r");
    printf("\nContents of %s -\n\n", filename);
    while ((ch = fgetc(fp) )!= EOF) {
        printf ("%c", ch);
    }
    fclose(fp);
    /* 追記モードで開いて内容を追加 */
    fp = fopen(filename, "a");
    fprintf(fp, "%s\n", content);
    fclose(fp);
    /* 追記後の内容を再表示して確認 */
    fp = fopen(filename, "r");
    printf("\nContents of %s -\n", filename);
    while ((ch = fgetc(fp) )!= EOF) {
        printf ("%c", ch);
    }
    fclose(fp);
    return 0;
}

実行結果

Contents of file_append.txt -
This text was already there in the file.
Content of file_append.txt after 'append' operation is -
This text was already there in the file.
This text is appeneded later to the file, using C programming.

まとめ:fopenのモード指定を覚えよう

C言語のファイル処理の基本は、fopen() の第2引数である「モード指定」を正しく理解することです。

  • "w"(書き込み):新規作成または全内容の上書き
  • "r"(読み込み):既存ファイルの読み取り専用
  • "a"(追記):既存内容を保持したまま末尾に追加

また、どの操作においても「fopen() の戻り値チェック」と「使用後の fclose()」を忘れないことが、安全で信頼性の高いプログラムにつながります。まずは今回のサンプルコードを実際に動かしながら、ファイル処理の流れを掴んでみてください。

  1. AIファイルとは?開き方から変換方法まで徹底解説

    この記事のポイントAIファイルは、Adobe Illustrator(アドビ イラストレーター)で作成されるベクター画像ファイルです。開くにはIllustratorを使用するか、無料のInkscapeなどを利用できます。Zamzarなどのオンラインツールや各種ソフトを使って、PNG・JPG・SVGなどの形式に変換できます。この記事では、AIファイルの概要から、実際に開く方法、SVG・JPG・PDF・PNGなど他の形式への変換方法まで、わかりやすく解説します。他のソフトウェアとの互換性を持たせたい場合にも役立つ内容です。AIファイルとは何か拡張子が「.ai」のファイルは、ほとんどの場合、Adob

  2. C++の例外処理入門!try・catch・throwの基本と標準例外クラス一覧

    C++における例外処理(Exception Handling)とは、プログラムの実行時に発生するエラー(ランタイムエラー)を適切に扱うための仕組みです。例外とは、実行時に送出(スロー)されるイベントのことで、C++ではすべての標準例外が std::exception クラスから派生しています。もし例外を捕捉しなかった場合、例外メッセージが出力され、プログラムは強制終了してしまいます。 C++標準では、例外関連のクラスが <exception> ヘッダに定義されており、プログラムの中で自由に利用できます。親子関係によるクラス階層は次のようになっています。 C++の主な標準例外クラス