ファイルシステムの基本

ファイルシステムの基本

プログラムで計算した結果をデータとして出力したい場合があります。

その方法を可能とするのがファイルシステムです。

ここでは、データをC言語で入出力する方法を紹介します。

fopen

ファイルを入力する際に使う際にはまず、fopenという命令を使います。

FILE *fopen(char *ファイル名, char *モード);

ファル名は開くファイルの名前をかきます。

モードは書き込むのか読み込むのかの設定です。

詳しいモードの指定は以下の表にまとめます。

モード 意味
r 読み込み用でファイルを開く
w 書き込み用でファイルを開く
a テキストファイルに追加する
rb 読み込み用にバイナリファイルを開く
wb 書き込み用にバイナリファイルを開く
ab バイナリファイルに追加する

fopenは失敗するとNULLを返します。

ファイルを開く際はNULLでないことを確認しましょう。

fclose

ファイルを閉じる際はfcloseを使います。命令は以下のとおりになります。

int fclose(FILE *ストリーム);

closeに成功すると0を返し、失敗するとEOFを返します。

ファイルを書き込む

では、テキストファイルを作成するプログラムを作成します。

プログラム

#include <stdio.h>
#include <stdlib.h>
 
int main(void){
    char str[50]="作成するファイルの内容です。\n";
    FILE *fp;
    char *p;
 
    if((fp=fopen("newfile.txt","w"))==NULL){
        printf("ファイルが開けません\n");
        exit(1);
    }
 
    p=str;
    while(*p){
        if(fputc(*p,fp)==EOF){
            printf("書き込み失敗\n");
            exit(1);
        }
        p++;
    }
    fclose(fp);
    return 0;
}

解説

fopenでファイルを開きます。ファイル名はnewfile.txtとしています。

while文で、pの内容「作成するファイルの内容です。」を一文字づつ書き込んでいます。

ここで使用するのが

int fputc(FILE *ストリーム);

です。エラーが起きるとEOFを返します。EOFは負の値が返されます。

最後に、fcloseでファイルを閉じます。

プログラムを実行すると「作成するファイルの内容です。」とかかれたnewfile.txtができているので確認してみてください。

ファイルを読み込む

続いて、作成したテキストファイルを読み込んでコンソールに表示するプログラムを作成します。

プログラム

#include <stdio.h>
#include <stdlib.h>

int main(void){
	FILE *fp;
	int i;

	if((fp=fopen("newfile.txt","r"))==NULL){
		printf("ファイルが開けません\n");
		exit(1);
	}

	while(1){
		i=fgetc(fp);
		if(i==EOF)break;
		putchar(i);
	}

	fclose(fp);
	return 0;
}

解説

fopenで開いて、fcloseで閉じるところは同じです。

ただ読み込む際は

int fgetc(FILE *ストリーム);

を使います。この関数は、unsigned char型の値として読み込み、int型として返します。エラーの場合はEOFを返します。

putcharでコンソールへ出力しています。

実行すると先ほど作ったnewfile.txtが表示されます。

作成するファイルの内容です。

モードをかえれば、書き足すこともできるのでいろいろ試してみてください。

著者:安井 真人(やすい まさと)