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

【C言語入門】ファイルの書き込みモード操作とfopen関数の使い方を徹底解説

ファイルとは、複数のレコードをひとつにまとめたものであり、ハードディスク上にデータを恒久的(永続的)に保存しておくための場所です。プログラムで使う変数や配列はメモリ上に置かれるため一時的なものですが、ファイルに書き込んだデータは電源を切っても失われません。

なぜファイルが必要なのか

  • プログラムが終了すると、メモリ上のデータはすべて失われてしまいます。

  • ファイルに保存しておけば、プログラム終了後もデータを保持できます。

  • 大量のデータをキーボードから毎回入力するのは非常に時間がかかります。ファイル化しておけば再入力の手間が省けます。

  • わずかなコマンドだけで、ファイルの中身に簡単にアクセスできます。

  • データを変更することなく、別のコンピュータへ簡単に移動できます。

  • C言語のコマンドを使えば、さまざまな方法でファイルにアクセスできます。

C言語におけるファイル操作の一覧

C言語で行える基本的なファイル操作は以下のとおりです。

  • ファイル名の指定
  • ファイルを開く
  • ファイルから読み込む
  • ファイルへ書き込む
  • ファイルを閉じる

基本構文

ファイルポインタの宣言は次のように記述します。

FILE *ファイルポインタ;

記述例:

FILE *fptr;

ファイルポインタへの命名とファイルを開く処理は次のように記述します。

ファイルポインタ = fopen("ファイル名", "モード");

記述例:

FILE *fp;
fp = fopen("sample.txt", "w");

モード「w」は書き込みモードを意味します。指定したファイルが存在しない場合は新しく作成され、すでに存在する場合は以前の内容が消去されて先頭から上書きされる点に注意してください。

サンプルプログラム1:学生の名前と点数をファイルに保存する

以下は、n人分の学生の名前と点数をキーボードから読み込み、「std.txt」というファイルに書き込むCプログラムです。

#include <stdio.h>
int main(){
    char name[50];
    int marks, i, num;
    printf("Enter number of students: ");
    scanf("%d", &num);
    FILE *fptr;
    fptr = (fopen("std.txt", "w")); // 書き込みモードでファイルを開く
    if(fptr == NULL){
        printf("Error!");
        exit(1);
    }
    for(i = 0; i < num; ++i){
        printf("For student%d\nEnter name: ", i+1);
        scanf("%s", name);
        printf("Enter marks: ");
        scanf("%d", &marks);
        fprintf(fptr,"\nName: %s \nMarks=%d \n", name, marks);
    }
    fclose(fptr);
    return 0;
}

実行結果

上記のプログラムを実行すると、次のように表示されます。

Enter number of students: 3
For student1
Enter name: lucky
Enter marks: 59
For student2
Enter name: pinky
Enter marks: 89
For student3
Enter name: bob
Enter marks: 45

サンプルプログラム2:従業員情報の保存と読み出し

以下は、従業員番号・氏名・給与をファイルに書き込み、その後同じファイルを読み込んで画面に表示するCプログラムです。書き込み後にモード「r」(読み込み)で開き直している点に注目してください。

#include<stdio.h>
int main ( ){
    FILE *fp;
    int eno;
    char ename[30];
    float sal;
    fp = fopen("emp.txt", "w"); // 書き込みモードでファイルを開く
    printf("enter the details of eno, ename, sal:");
    scanf("%d%s%f", &eno, ename, &sal);
    fprintf(fp, "%d%s%f", eno, ename, sal);
    fclose(fp);
    fp = fopen("emp.txt", "r"); // 読み込みモードで再度開く
    fscanf(fp, "%d%s%f", &eno, ename, &sal);
    printf("employee no: = %d\n", eno);
    printf("employee name = %s\n", ename);
    printf("salary = %f\n", sal);
    fclose(fp);
    return 0;
}

実行結果

上記のプログラムを実行すると、次のように表示されます。

enter the details of eno, ename, sal:1 Pinky 34000
employee no: = 1
employee name = Pinky
salary = 34000.000000

まとめ

C言語では、fopen関数に「w」(書き込み)や「r」(読み込み)などのモードを指定してファイルを操作します。fprintf関数で書き込み、fscanf関数で読み込み、最後にfclose関数で必ずファイルを閉じるのが基本の流れです。ファイル操作を習得すれば、プログラム終了後もデータを残せるようになり、実用的なアプリケーション開発への第一歩となります。

  1. 【C言語】putw()関数とgetw()関数の使い方をわかりやすく解説

    ファイルとは、レコードの集合体であり、データを永続的に保存しておくためのハードディスク上の場所のことです。C言語ではファイルを利用することで、プログラムの実行が終了しても失われないデータを扱えます。ファイルに対する主な操作C言語におけるファイル操作は、基本的に以下の手順で行います。ファイル名を指定する(命名)ファイルを開くファイルから読み込むファイルに書き込むファイルを閉じる基本構文まず、ファイルを扱うためのファイルポインタを宣言します。FILE *ファイルポインタ;宣言例:FILE *fptr;続いて、fopen()関数を使ってファイルを開きます。ファイルポインタ = fopen(ファイル名

  2. 【C言語】putc関数とgetc関数を使ってファイルに1文字ずつ書き込み・読み込みする方法

    ファイルとは ファイル(File)とは、レコードの集まりを指し、ハードディスク上にデータを恒久的に保存しておくための場所のことです。プログラムが終了してもデータが失われないよう、永続的な保存が必要な場合にファイルが利用されます。 ファイルに対する主な操作 C言語におけるファイル操作は、基本的に以下の手順で行います。 ファイル名を指定する ファイルを開く ファイルから読み込む ファイルへ書き込む ファイルを閉じる 基本構文 まず、ファイルを扱うためのファイルポインタを宣言します。 FILE *ファイルポインタ; 宣言の例: FILE *fptr; 次に、fopen関数を使ってファイルを開きま