【C言語】fopen関数の引数のそれぞれの意味について解説

この記事では、C言語のfopen関数を使用してファイルを開く際に必要な引数について解説します。

具体的には、ファイル名の指定方法、モードの指定方法、エンコーディングの指定方法について説明します。

これにより、初心者の方でもファイルの読み書きを行う際に必要な知識を習得することができます。

目次から探す

fopen関数の引数の概要

fopen関数は、C言語でファイルを開くための関数です。

ファイルを開く際には、fopen関数に引数を指定する必要があります。

ここでは、fopen関数の引数の概要について説明します。

ファイル名

fopen関数の最初の引数は、開きたいファイルの名前です。

通常、ファイル名は拡張子を含んだ形式で指定します。拡張子も含めて1つのファイル名なので、拡張子を非表示にしてエクスプローラーを使っている人は注意しましょう。

例えば、sample.txtdata.csvなどのように指定します。


FILE *file = fopen("sample.txt", "r");

モード

fopen関数の2番目の引数は、ファイルを開くモードを指定します。

モードには以下のようなオプションがあります。

モード説明
“r”読み込みモード。既存のファイルを開きます。ファイルが存在しない場合はエラーになります。
“w”書き込みモード。新しいファイルを作成します。既存のファイルがある場合は、ファイルの内容が削除されます。
“a”追記モード。ファイルの末尾にデータを追加します。ファイルが存在しない場合は新しいファイルが作成されます。
“rb”バイナリ読み込みモード。バイナリファイルを読み込みます。
“wb”バイナリ書き込みモード。バイナリファイルを作成します。
“ab”バイナリ追記モード。バイナリファイルの末尾にデータを追加します。

エンコーディング

fopen関数の3番目の引数は、ファイルのエンコーディングを指定します。

エンコーディングは、テキストファイルの文字コードを表します。

一般的なエンコーディングには、UTF-8Shift_JISなどがあります。


FILE *file = fopen("sample.txt", "r", "UTF-8");

エンコーディングを指定しない場合は、デフォルトのエンコーディングが使用されます。

以上が、fopen関数の引数の概要です。

ファイル名、モード、エンコーディングを適切に指定することで、ファイルを正しく開くことができます。

ファイル名の指定方法

ファイルを開く際に、fopen関数の第1引数にはファイル名を指定する必要があります。

ファイル名の指定方法には、相対パスと絶対パスの2つがあります。

相対パス

相対パスは、現在の作業ディレクトリを基準としてファイルの位置を指定する方法です。

具体的な指定方法は以下の通りです。


FILE *fp;
fp = fopen("data.txt", "r");

上記の例では、data.txtというファイルを現在の作業ディレクトリから探し、読み込みモードで開いています。

相対パスを指定する際には、ファイル名のみを指定することもできます。


FILE *fp;
fp = fopen("../data.txt", "r");

上記の例では、現在の作業ディレクトリの親ディレクトリにあるdata.txtというファイルを読み込みモードで開いています。

../は親ディレクトリを表します。

絶対パス

絶対パスは、ファイルの位置を完全に指定する方法です。

具体的な指定方法は以下の通りです。


FILE *fp;
fp = fopen("/Users/username/Documents/data.txt", "r");

上記の例では、/Users/username/Documents/という絶対パスで指定されたdata.txtというファイルを読み込みモードで開いています。

絶対パスでは、ファイルの位置を完全に指定するため、作業ディレクトリに関係なくファイルを開くことができます。

適切な方法を選択し、ファイル名を指定してください。

モードの指定方法

ファイルを開く際に、fopen関数の第2引数にはモードを指定する必要があります。

モードは、ファイルをどのような目的で開くかを指定するためのものです。

以下では、主なモードの指定方法について説明します。

読み込みモード

読み込みモードでは、ファイルの内容を読み取ることができます。

読み込みモードを指定するには、第2引数に文字列rを指定します。

以下に、読み込みモードの例を示します。


#include <stdio.h>
int main() {
    FILE *file;
    char ch;
    file = fopen("sample.txt", "r");
    if (file == NULL) {
        printf("ファイルを開けませんでした。\n");
        return 1;
    }
    while ((ch = fgetc(file)) != EOF) {
        printf("%c", ch);
    }
    fclose(file);
    return 0;
}

上記の例では、sample.txtというファイルを読み込みモードで開き、その内容を1文字ずつ表示しています。

書き込みモード

書き込みモードでは、ファイルに新しい内容を書き込むことができます。

書き込みモードを指定するには、第2引数に文字列wを指定します。

以下に、書き込みモードの例を示します。


#include <stdio.h>
int main() {
    FILE *file;
    file = fopen("output.txt", "w");
    if (file == NULL) {
        printf("ファイルを開けませんでした。\n");
        return 1;
    }
    fprintf(file, "Hello, World!");
    fclose(file);
    return 0;
}

上記の例では、output.txtというファイルを書き込みモードで開き、Hello, World!という文字列をファイルに書き込んでいます。

追記モード

追記モードでは、既存のファイルの末尾に新しい内容を追加することができます。

追記モードを指定するには、第2引数に文字列aを指定します。

以下に、追記モードの例を示します。


#include <stdio.h>
int main() {
    FILE *file;
    file = fopen("output.txt", "a");
    if (file == NULL) {
        printf("ファイルを開けませんでした。\n");
        return 1;
    }
    fprintf(file, "This is a new line.");
    fclose(file);
    return 0;
}

上記の例では、output.txtというファイルを追記モードで開き、This is a new line.という文字列をファイルの末尾に追加しています。

これらのモードを適切に指定することで、ファイルの読み書きを行うことができます。

ただし、書き込みモードや追記モードでファイルを開く場合は、既存のファイルの内容が上書きされる可能性があるため、注意が必要です。

エンコーディングの指定方法

ファイルを開く際に、エンコーディングを指定することもできます。

エンコーディングは、テキストデータをバイト列に変換するためのルールや規則のことです。

C言語では、主にテキストモードとバイナリモードの2つのエンコーディングを指定することができます。

テキストモード

テキストモードでは、ファイルをテキストデータとして扱います。

テキストデータは、文字や文字列の集まりであり、人間が読み書きすることができる形式です。

テキストモードでは、C言語の文字コードに基づいてテキストデータを扱います。

テキストモードを指定するには、fopen関数のモード引数に t または w を指定します。

例えば、読み込みモードでテキストモードを指定する場合は、以下のようになります。


FILE *fp;
fp = fopen("sample.txt", "rt"); //tは省略可

バイナリモード

バイナリモードでは、ファイルをバイナリデータとして扱います。

バイナリデータは、0と1のビットの集まりであり、テキストデータとは異なり、直接的には人間が読み書きすることができません。

バイナリモードでは、C言語のバイト単位でデータを扱います。

バイナリモードを指定するには、fopen関数のモード引数に b を指定します。

例えば、書き込みモードでバイナリモードを指定する場合は、以下のようになります。


FILE *fp;
fp = fopen("data.bin", "wb");

バイナリモードでは、テキストデータだけでなく、画像や音声などのバイナリデータも扱うことができます。

エンコーディングの指定方法は、ファイルを開く際にモード引数に適切な文字を指定することで行います。

テキストモードでは t または w 、バイナリモードでは b を指定します。

適切なエンコーディングを指定することで、ファイルの読み書きを正しく行うことができます。

目次から探す