【独学C言語】ファイル操作

※この記事は「2021年5月16日」に更新しました。

今回は、ファイル操作について。

前回まで学習したデータの扱いだと、プログラムが終了するとメモリ上から消えてしまいます。

なぜなら、メモリ内に一時的に確保された領域に格納されているからです。

つまり、データを保持するということはできないわけです。

データを永続的に保持するためには、補助記憶装置(ハードディスクなど)にファイルとして保存しておく必要があります。

コンピュータの処理は、CPU(中央演算処理装置)によって行われます。

CPU は、必要なデータをメモリから取得します。

つまり、まずはメモリ内にデータが読み込まれている必要があるということです。

メモリにファイルのデータが読み込めたら、データを操作することができるようになります。

ファイル操作

それでは、C言語における、ファイル操作を説明していきます。

コーディングの流れとしては、以下の通りです。

  • ファイル構造体へのファイルポインタを作成する。
  • ファイルをオープンする。
  • ファイルの読み書きを行う。
  • ファイルをクローズする。

まずは、この流れをしっかり理解しましょう。

ファイルポインタとファイル構造体

C言語では、ファイルのデータを操作するために、ファイルポインタと呼ばれるものを使います。

簡単に説明するとファイルの情報を指し示すポインタといったところです。

ただし、このファイルポインタは直接メモリ上のファイルを指し示しているというわけではありません。

読み込んだファイルの情報は、ファイル構造体と呼ばれる、構造体に格納されます。

ファイル構造体は、ファイルの読み込まれた位置、ファイルの文字数など、ファイルに関する様々な情報を持っています。



オープンとクローズ

C言語でファイルを使用するためには、オープンという作業が必要です。

そして、メモリに読み込まれたファイルの内容を必要があれば、補助記憶装置に書き込み、使用していたメモリを解放する、クローズという作業もあります。

ファイルのオープン

ファイルのオープンには、fopen関数を使います。

FILE *fopen(char *ファイル名, char *アクセスタイプ);

第1引数でファイル名、第2引数でアクセスタイプを指定します。

ファイルのクローズ

ファイルのクローズには、fclose関数を使います。

int fclose(FILE *ファイルポインタ);

ファイルをオープンして、そのファイルが必要なくなったら、必ずクローズするようにしましょう。

サンプルプログラム【C言語】

ファイル操作を理解するためのサンプルプログラムです(C言語)。

ファイル操作をするので、あらかじめ test_file というファイルを用意しておきます。

まずは、test_file の中身です。

This is test_file.

test
test test

次に sample.c というソースファイルを作成します。

#include <stdio.h>

#define STR_SIZE 256

int main(void)
{
    char str[STR_SIZE];    /* ファイル内容読み込み用の配列 */
    FILE *fp;    /* ファイルポインタ */

    fp = fopen("test_file", "r");

    printf("\n");

    fgets(&str[0], sizeof(str), fp);

    printf("%s", &str[0]);

    printf("\n");

    fclose(fp);

    return 0;
}

ファイルをオープンして、1行目を表示させ、ファイルをクローズするというサンプルプログラムです。

FILE というのは、ファイル構造体の型です。

stdio.h の中で FILE として typedef されています。

fgets関数は、ファイルポインタによって、結び付けられているファイルから文字を読み取ります。

指定した数値-1 の文字数を読み込むか、改行文字またはファイルの終わりに達するまで続けられます。

読み取った文字列の最後にはヌル文字が追加されます。

今回の場合「指定した数値-1」は、sizeof(str) です。

結果は以下の通りです。

ファイル操作

最後に

いかがでしょうか。

今回は、ファイル操作について、学習しました。

C言語を理解するためにも重要な部分なので、処理の流れをしっかり理解するようにしましょう。

次回は、よく使うファイル関数を紹介していこうと思っています。