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
C言語ゼミ


