fseek関数 - ファイルストリームの位置指定子を位置を設定
fseek関数を使うと、ファイルストリームの位置指定子が指す位置を設定できます。stdio.hヘッダを読み込むと使えます。
#include <stdio.h> int fseek(FILE *fp, long offset, int origin);
第一引数は、ファイルストリームです。第二引数は、ファイルストリームの位置指定子が指す相対位置です。第三引数を基準位置とします。第三引数は、基準とする位置です。「SEEK_SET」でファイルの先頭、「SEEK_CUR」でファイルの現在位置、「SEEK_END」で、ファイルの末尾を指定できます。
fseek関数が使用される主な用途は、データが固定長のファイルの読み書きをするときと、ファイルサイズを取得したいときです。
ファイルサイズを取得するサンプル
fseek関数とftell関数を使って、ファイルサイズを取得するサンプルです。
#include <stdio.h> #include <stdint.h> #include <stdlib.h> int main(void) { // ファイルを開く const char* in_file = "input.txt"; FILE* in_fp = fopen(in_file, "r"); if (in_fp == NULL) { fprintf(stderr, "Can't open file %s\n", in_file); exit(1); } // ファイルの末尾に位置指定子を移動 fseek(in_fp, 0, SEEK_END); // ファイルの末尾の位置を取得。これは、ファイサイズになります。 int32_t file_size = (int32_t)ftell(in_fp); printf("%d\n", file_size); // ファイルを閉じる fclose(in_fp); }
入力ファイル。末尾に改行はありません。
HelloWorld!
出力結果。ファイルサイズが取得できています。
11