ランダムアクセス

 今回は、C言語のファイルの読み込み・書き込み処理に関する応用的な概念としてランダムアクセスについて説明します。

 ファイルの入出力処理は、まず、ファイルをオープンし、データを読み書きした後でファイルをクローズする、という流れでした。通常、ファイルの読み書き処理は、ファイルの先頭から1文字ずつ読み込む(書き込む)方法をとります。この処理方法はシーケンシャルファイル処理と呼ばれています。そうではなくて、「先頭から○文字目からデータを読み込みたい」「先頭から○文字目にデータを書き込みたい」といったように、ファイルの途中に書かれているデータが欲しい場合があるかもしれません。そのときに利用するのがランダムアクセスファイル処理です。

 前の記事で作成した「testfile4.txt」を用います。以下のプログラムを作成し、実行してみて下さい。

#include <stdio.h>

int main(int argc, const char * argv[])
{
    
    // insert code here...
    
    // ファイルのオープン
    FILE *fp;
    if((fp = fopen("testfile4.txt", "r")) == NULL) {
        printf("ファイルを開けませんでした。");
    } else {
        
        // ランダムアクセス設定
        fseek(fp, 10L, SEEK_SET);
        
        // ファイルから読み込み
        char ch[40];
        fgets(ch, 40, fp);
        printf("%s", ch);
        
        // ファイルのクローズ
        fclose(fp);
     
    }
    
    return 0;
}

 以下のような結果が表示されます。

klmnopqrstuvwxyz0123456789

 ランダムアクセスファイル処理の設定にはfseek関数を利用します。fseek関数の1つ目の引数はファイルポインタ、2番目の引数は、ファイルのどこから入出力処理をはじめるか、というものです。上のプログラムの場合は、「10L」とあるので、10文字目からとなります(Lは、整数型の中でもlong型を指すLです。long型の数値で指定しなければならないためのものです。あまり気になさらないで大丈夫です)。3番目のSEEK_SETは、おまじないだと思っていただければ構いません。

 このようにすればランダムアクセスファイル処理を使用できます。「先頭から○文字目に書き込む」という処理も、これで出来ますので、必要な際はぜひ使ってみて下さい。

■スポンサーリンク

このページの先頭へ