C言語 ファイル位置の設定 - stdio.h - [ fsetpos ]
2008.09.27 Saturday | by LRESULT
ファイル位置の設定には、fsetpos()を使用します。
まず、ファイル位置とは、なに? というとこから。
例えば、fopen()を使用してファイルを読み取りモード "r" で開いた直後では、
ファイル位置は先頭の0です。
そこから、fgetc()で5文字読み取った後では、ファイル位置は5となります。
書き込んだ場合でも同様で、5文字書き込んだ後では、ファイル位置は5となります。
つまり、カーソル位置のようなもので、
正確にはファイル位置指示子といい、FILE型変数の指している位置となります。
書式 | int fsetpos( FILE *fp, const fpos_t *pos ) |
---|---|
機能 | ファイル位置の設定 |
引数 | FILE *fp : ファイル(ストリーム)ポインタ const fpos_t *pos : ファイル位置格納 |
戻り値 | 成功すると、0を返し、 失敗すると、0以外を返します。 |
上で出て来た fpos_t型とは、ファイル位置を格納する為の型ですが、
typedef long fpos_t
というように、実際にはlong型です。(※ VC8では、_int64で定義されています)
ファイル「test.txt」を開いた後に、『Hello World』の、 『World』のみ読み込みたい場合は、 fsetpos()で、ファイル位置(読み込み位置)を6に設定した後に、 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; } pos = 6; fsetpos( fp, &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; } |
W o r l d ファイル位置 11 |
---|
となります。 これで、『World』のみ取得できました。 同じファイルをもう一度読み込む場合などには、fsetpos()に0を設定し ファイル位置を先頭に戻してから読み込みます。 |