12.基本ライブラリ

12-5. ファイル操作

◇ファイル操作

・ftell()とfseek()

ftellとは?

このftell()はファイル内の現在地(具体的には読み込み時のカーソル位置)を数値にして検出する関数です。

関数名   :ftell
必要なヘッダ:stdio.h
関数のタイプ:long int ftell(FILE *stream);
引数    :stream FILE型変数へのポインタ
戻り値   :成功(現在の位置)・失敗(-1 long型)

fseekとは?

fseekはカーソル位置を変更する関数です。
また、テキストファイルとバイナリファイルとでは多少使い方が違うようですがOSや開発環境に依存する部分だと思われます。(未確認)

関数名   :fseek
必要なヘッダ:stdio.h
関数のタイプ:int fseek(FILE *stream, long int offset, int whence);
引数    :stream FILE型変数へのポインタ
       offset 変更する位置(whenceからの位置)
       whence 以下の3つ
        SEEK_SET ファイルの先頭
        SEEK_CUR カーソル現在地
        SEEK_END ファイルの終端
戻り値   :成功(0)・失敗(0以外)

サンプルプログラム

#include<stdio.h>

main()
{
    FILE *fp;
    char in_str[100];
    long in_pos,pos1,pos2;
    char *filename="readme.txt";
    
    if((fp = fopen(filename,"r"))==NULL){
        printf("%s が見つかりません。",filename);
    }
    else{
        printf("カーソル位置入力:");
        scanf("%ld",&in_pos);
        fseek(fp,in_pos,SEEK_SET);
        pos1 = ftell(fp);
        fgets(in_str,100,fp);
        pos2 = ftell(fp);
        printf("カーソル位置1:%5ld\n%s",pos1,in_str);
        printf("カーソル位置2:%5ld\n",pos2);
        fclose(fp);
    }
    return;
}

ここではカーソル位置を入力して読み出し、読み出し前と後の位置を検出して表示させています。