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

C言語のファイルエラー処理関数(ferror・perror・feof)の使い方を徹底解説

ファイルとは、レコードの集まりを指し、データを永続的に保存しておくためのハードディスク上の場所です。C言語では、これらのファイルに対してさまざまな操作を行うことができます。

ファイルに対する主な操作

C言語におけるファイル操作は、主に以下の手順で行われます。

  • ファイルに名前を付ける
  • ファイルを開く
  • ファイルから読み込む
  • ファイルへ書き込む
  • ファイルを閉じる

ファイルを開くための構文

まず、ファイルポインタを宣言します。

FILE *File pointer;

記述例:

FILE *fptr;

次に、fopen関数を使ってファイル名とモードを指定してファイルを開きます。

File pointer = fopen("File name", "mode");

具体的な例は以下の通りです。

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

ファイル処理で発生しうる主なエラー

ファイル操作中には、以下のようなエラーが発生する可能性があります。

  • ファイルの終端(EOF)を超えて読み込もうとした場合
  • デバイスがオーバーフローした場合
  • 無効なファイルを開こうとした場合
  • 異なるモードで開いたファイルに対して無効な操作を行った場合

こうしたエラーを検出・処理するために、C言語では「ferror」「perror」「feof」という3つの標準ライブラリ関数が用意されています。

ferror( ) 関数

ferror関数は、読み込み・書き込み操作の実行中にエラーが発生したかどうかを検出するために使用します。

構文:

int ferror(file pointer);

戻り値は、正常終了時には0を返し、エラーが発生した場合には0以外の値を返します。

記述例:

FILE *fp;
if (ferror(fp))
    printf("error has occurred");

サンプルプログラム

以下は、ferror関数を使用したCプログラムの例です。

#include<stdio.h>
int main(){
    FILE *fptr;
    fptr = fopen("sample.txt","r");
    if(ferror(fptr)!=0)
        printf("error occurred");
    putc('T',fptr);
    if(ferror(fptr)!=0)
        printf("error occurred");
    fclose(fptr);
    return 0;
}

実行結果

このプログラムを実行すると、以下のような結果が出力されます。

error occurred
Note: try to write a file in the read mode results an error.

読み取り専用モードで開いたファイルに書き込もうとすると、エラーが発生することが確認できます。

perror( ) 関数

perror関数は、発生したエラーの内容を文字列として出力(表示)するために使用します。

構文:

perror(string variable);

記述例:

FILE *fp;
char str[30] = "Error is";
perror(str);

この場合の出力は以下のようになります。

Error is: error 0

サンプルプログラム

以下は、perror関数を使用したCプログラムの例です。

#include<stdio.h>
int main ( ){
    FILE *fp;
    char str[30] = "error is";
    int i = 20;
    fp = fopen ("sample.txt", "r");
    if (fp == NULL){
        printf ("file doesnot exist");
    }
    else{
        fprintf (fp, "%d", i);
        if (ferror (fp)){
            perror (str);
            printf ("error since file is opened for reading only");
        }
    }
    fclose (fp);
    return 0;
}

実行結果

このプログラムを実行すると、以下のような結果が出力されます。

error is: Bad file descriptor
error since file is opened for reading only

読み取り専用で開いたファイルへの書き込みが失敗し、perror関数によってエラー内容が出力されていることがわかります。

feof( ) 関数

feof関数は、ファイルの終端(EOF)に達したかどうかを判定するために使用します。

構文:

int feof(file pointer);

戻り値は、ファイルの終端に達していれば0以外の値を返し、まだ達していなければ0を返します。

記述例:

FILE *fp;
if (feof(fp))
    printf("reached end of the file");

サンプルプログラム

以下は、feof関数を使用したCプログラムの例です。

#include<stdio.h>
main ( ){
    FILE *fp;
    int i,n;
    fp = fopen ("number.txt", "w");
    for (i=0; i<=100;i= i+10){
        putw (i, fp);
    }
    fclose (fp);
    fp = fopen ("number.txt", "r");
    printf ("file content is");
    for (i=0; i<=100; i++){
        n = getw (fp);
        if (feof (fp)){
            printf ("reached end of file");
            break;
        }else{
            printf ("%d", n);
        }
    }
    fclose (fp);
    getch ( );
}

実行結果

このプログラムを実行すると、以下のような結果が出力されます。

File content is
10 20 30 40 50
60 70 80 90 100
Reached end of the file.

このように、feof関数を使えば、ファイルの終端に到達したタイミングを正確に検出し、無限ループや不要な読み込みを防ぐことができます。

  1. Windowsのファイルシステムエラー(-2147219200)とは?原因と5つの解決策を徹底解説

    Windowsは、Microsoft社が開発・提供する世界で最も人気のあるオペレーティングシステムの一つです。豊富な機能と使いやすさから、多くのユーザーに支持されています。しかし、完璧なソフトウェアは存在せず、Windowsでも予期せぬエラーや不具合が発生することがあります。こうしたトラブルを放置すると、デバイスに深刻な影響を及ぼすこともあります。 その一例が「ファイルシステムエラー -2147219200」です。これはWindowsの使用中に遭遇することのある、比較的よく見られるシステムエラーの一種です。 ファイルシステムエラーの主な原因としては、ディスクの不良セクタ、破損したファイル、不

  2. Windows 10で「ファイル システム エラー (-2147219194)」が発生する原因と6つの解決方法

    Windows 10で画像ファイル(.jpg、.jpeg、.pngなど)を開こうとした際に、「ファイル システム エラー (-2147219194)」というエラーメッセージが表示されることがあります。このエラーは実際に多くのユーザーが経験しており、業務でも何度も目にしたことがあるトラブルです。エラーメッセージは以下のように表示されます。ファイル システム エラー (-2147219194) の主な原因このエラーメッセージが表示される理由は、大きく分けて以下の2つです。開こうとしている画像ファイル自体が破損している画像を開くためのアプリケーション(フォトアプリなど)が破損しているまた、Windo