C言語 ファイル位置の取得 - stdio.h - [ fgetpos ]
2008.09.27 Saturday | by LRESULT
ファイル位置の取得には、fgetpos()を使用します。
まず、ファイル位置とは、なに? というとこから。
例えば、fopen()を使用してファイルを読み取りモード "r" で開いた直後では、
ファイル位置は先頭の0です。
そこから、fgetc()で5文字読み取った後では、ファイル位置は5となります。
書き込んだ場合でも同様で、5文字書き込んだ後では、ファイル位置は5となります。
つまり、カーソル位置のようなもので、
正確にはファイル位置指示子といい、FILE型変数の指している位置となります。
書式 | int fgetpos( FILE *fp, fpos_t *pos ) |
---|---|
機能 | ファイル位置の取得 |
引数 | FILE *fp : ファイル(ストリーム)ポインタ fpos_t *pos : ファイル位置格納 |
戻り値 | 成功すると、0を返し、 失敗すると、0以外を返します。 |
上で出て来た fpos_t型とは、ファイル位置を格納する為の型ですが、
typedef long fpos_t
というように、実際にはlong型です。(※ VC8では、_int64で定義されています)
ファイル「test.txt」を開いた直後のファイル位置と、 fgetc()で5文字取得した後のファイル位置を調べてみます。 (※ 「test.txt」の内容は、『Hello World』としておきます。) |
---|
#include <stdio.h> int main(void) { FILE *fp; char *fname = "test.txt"; int i, c; fpos_t pos; fp = fopen( fname, "r" ); if( fp == NULL ){ printf( "%sファイルが開けません¥n", fname ); return -1; } fgetpos( fp, &pos ); printf( "ファイル位置 %d¥n", pos ); for( i=0; i<5; i++ ){ c = fgetc( fp ); printf( "%c¥n", c ); } fgetpos( fp, &pos ); printf( "ファイル位置 %d¥n", pos ); fclose( fp ); return 0; } |
ファイル位置 0 H e l l o ファイル位置 5 |
---|
となります。 fgetc()でファイル位置が変更されている事が分かります。 |