C言語ファイル操作マスター!短時間で学べる7つのステップ

C言語のファイル操作学習ガイドC言語
この記事は約9分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

今日はC言語のファイル操作について深く掘り下げていきます。

この記事では、基本的なファイルの開閉からエラーハンドリング、さらにはfopen関数のカスタマイズ方法までを紹介します。

各部分では具体的なコード例を紹介し、その動作となぜそのように書くのかを解説します。

●C言語とは

C言語は、1972年にベル研究所で開発された汎用のプログラミング言語です。

C言語はその効率の良さと拡張性から、オペレーティングシステムの開発や組み込みシステムのプログラミングなどに広く利用されています。

●ファイル操作の基本

C言語では、ファイルを扱うための標準ライブラリが提供されています。

その中でもfopen関数は、ファイル操作の出発点となる重要な関数です。

fopen関数は指定したファイルを開き、それを操作するための「ファイルポインタ」を返します。

●fopen関数の使い方

○fopenの基本

fopen関数は次のような形式で使います。

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

pathには操作するファイルのパスを、modeにはファイルをどのように開くかを指定します。

modeには、”r”(読み取り)や”w”(書き込み)などのオプションがあります。

○サンプルコード1:fopenを使ったファイルのオープン

下記のコードでは、”sample.txt”という名前のファイルを読み取りモードで開く操作を行っています。

ファイルが正常に開けたかどうかを確認するために、戻り値がNULLでないかを確認します。

#include <stdio.h>

int main() {
    FILE *file;
    file = fopen("sample.txt", "r");
    if (file == NULL) {
        printf("ファイルを開けませんでした。\n");
        return 1;
    }
    // ここでファイルの操作を行う
    fclose(file);
    return 0;
}

このコードを実行すると、”sample.txt”というファイルが正常に開けた場合は何も出力せず、開けなかった場合は「ファイルを開けませんでした。」と出力されます。

●fopen関数の詳細な使い方

fopen関数を更に深く理解するために、読み書き操作とファイルのクローズを学びましょう。

○サンプルコード2:fopenを使った読み書き

ここでは、ファイルを開いた後に文字列を書き込み、それを読み出す例を紹介します。

#include <stdio.h>

int main() {
    FILE *file;
    char str[256];
    file = fopen("sample.txt", "w+");
    if (file == NULL) {
        printf("ファイルを開けませんでした。\n");
        return 1;
    }
    fputs("Hello, C language!\n", file);
    rewind(file);
    fgets(str, 256, file);
    printf("%s", str);
    fclose(file);
    return 0;
}

このコードを実行すると、「Hello, C language!」という文字列を”sample.txt”に書き込み、その後で同じ文字列を読み出してコンソールに表示します。

○サンプルコード3:fopenを使ったファイルのクローズ

C言語では、ファイルの操作が終わったら必ずfclose関数でファイルを閉じる必要があります。

#include <stdio.h>

int main() {
    FILE *file;
    file = fopen("sample.txt", "r");
    if (file == NULL) {
        printf("ファイルを開けませんでした。\n");
        return 1;
    }
    // ここでファイルの操作を行う
    fclose(file);
    return 0;
}

このコードでは、”sample.txt”を開いた後、何も操作せずにすぐに閉じています。

実際にはこの間に何かしらの操作を行うでしょう。

●エラーハンドリング

ファイル操作を行う際には、エラーハンドリングが重要な要素となります。

ファイルが存在しない、パーミッションがない、ディスク容量が不足しているなど、様々な理由でファイル操作が失敗する可能性があります。

C言語のfopen関数を使用する際には、これらのエラーシチュエーションに備えて適切なエラーハンドリングを行うことが求められます。

○サンプルコード4:fopenのエラーハンドリング

それでは、C言語でのfopenのエラーハンドリング方法について具体的なコードを見てみましょう。

#include <stdio.h>

int main() {
    FILE *fp;
    fp = fopen("存在しないファイル.txt", "r");
    if (fp == NULL) {
        printf("ファイルが開けませんでした。\n");
        return 1;
    }
    // ここから通常のファイル操作
    fclose(fp);
    return 0;
}

このコードでは、まずfopen関数で”存在しないファイル.txt”を読み込みモードで開こうと試みています。

fopen関数は、ファイルのオープンに失敗するとNULLを返すので、その戻り値をチェックすることでファイルが正常に開けたかどうかを確認しています。

もしファイルが開けなかった場合はエラーメッセージを表示し、プログラムを終了します。

このようにエラーハンドリングを行うことで、プログラムが予期しない動作をすることを防ぎ、問題が発生した際にそれを適切に対処することができます。

●fopenのカスタマイズ方法

fopen関数は、そのオプションを使って様々な方法でカスタマイズすることが可能です。

例えば、ファイルを読み込み専用や書き込み専用にする、テキストモードやバイナリモードで開く、ファイルを開いた時点で内容を全て削除するなど、用途に応じて適切なオプションを選択することができます。

○サンプルコード5:fopenのオプションを使ったカスタマイズ

#include <stdio.h>

int main() {
    FILE *fp;
    fp = fopen("sample.txt", "w+");
    if (fp == NULL) {
        printf("ファイルが開けませんでした。\n");
        return 1;
    }
    // ここから通常のファイル操作
    fclose(fp);
    return 0;
}

このコードでは、fopenの第2引数に”w+”を指定することで、新たに”sample.txt”というファイルを作成し、そのファイルを読み書き両用で開いています。

“w+”オプションは、ファイルが既に存在する場合はその内容を全て削除し、存在しない場合は新たにファイルを作成します。

●応用例:fopenを使ったデータの書き込みと読み出し

fopen関数はデータの書き込みと読み出しにも使われます。

これらの操作を理解し、実装することで、C言語を使ったデータ管理が可能になります。

○サンプルコード6:テキストファイルへの書き込み

まずは、fopen関数を使ってテキストファイルにデータを書き込む方法を見ていきましょう。

#include<stdio.h>

int main(){
  FILE *fp;

  fp = fopen("sample.txt", "w");
  if(fp == NULL){
    printf("ファイルが開けませんでした。\n");
    return 1;
  }

  fprintf(fp, "Hello, C言語!\n");

  fclose(fp);

  return 0;
}

このコードでは、まずfopen関数を使ってsample.txtという名前のファイルを書き込みモード(“w”)で開きます。

次にfprintf関数を使って開いたファイルに”Hello, C言語!\n”という文字列を書き込みます。

最後にfclose関数を使ってファイルを閉じます。

このコードを実行すると、プログラムと同じディレクトリにsample.txtというテキストファイルが作成され、その中に”Hello, C言語!\n”という文字列が書き込まれます。

○サンプルコード7:テキストファイルからの読み出し

次に、テキストファイルからデータを読み出す方法を見ていきましょう。

#include<stdio.h>

int main(){
  FILE *fp;
  char str[256];

  fp = fopen("sample.txt", "r");
  if(fp == NULL){
    printf("ファイルが開けませんでした。\n");
    return 1;
  }

  fgets(str, 256, fp);
  printf("%s", str);

  fclose(fp);

  return 0;
}

このコードでは、まずfopen関数を使ってsample.txtという名前のファイルを読み取りモード(“r”)で開きます。

次にfgets関数を使って開いたファイルから文字列を読み出し、strという配列に格納します。

最後にprintf関数を使って読み出した文字列を表示し、fclose関数を使ってファイルを閉じます。

このコードを実行すると、先ほど書き込んだ”Hello, C言語!\n”という文字列がコンソールに表示されます。

●注意点と対処法

ファイル操作を行う際には、いくつか注意すべき点があります。最も重要なのは、開いたファイルは必ず閉じることです。

fclose関数を呼び出さないと、ファイルが開きっぱなしになり、その結果としてリソースの浪費や他のプログラムがそのファイルを開けなくなる可能性があります。

また、fopen関数でファイルを開く際、ファイルが存在しない場合や権限がない場合などにはNULLが返されます。

そのため、ファイルを開く前には必ずNULLチェックを行い、問題がある場合には適切に対処するようにしましょう。

まとめ

以上が、C言語でのファイル操作の基本となります。

fopen関数を使えば、簡単にファイルを開いたり閉じたり、データの読み書きを行うことができます。

また、エラーハンドリングやオプションを活用することで、より安全で便利なファイル操作を実現することが可能です。

この記事を参考に、C言語のファイル操作をマスターして、より高度なプログラミングに挑戦してみてください。