C言語 ファイル位置の設定 ファイルサイズの取得 - stdio.h - [ fseek ]
2008.09.28 Sunday | by LRESULT
ファイル位置の設定は、fseek()を使用します。
ファイル位置とは、ファイルにおけるカーソル位置のようなもので
読み込み書き込みの規準となる位置のことです。
書式 | int fseek( FILE *fp, long offset, int origin ) |
---|---|
機能 | ファイル位置を原点位置から移動させ設定する |
引数 | FILE *fp : ファイル(ストリーム)ポインタ long offset : 指定位置からのズレ量 int origin : 原点位置の種類 |
戻り値 | 成功すると、0を返し、 失敗すると、0以外を返します。 |
また、引数origin の種類には以下のものが定義されています。
SEEK_SET | ファイルの先頭位置を指定 |
---|---|
SEEK_CUR | ファイルの現在位置を指定 |
SEEK_END | ファイルの終端位置を指定 |
つまり、引数origin に SEEK_SETを設定すると、fsetpos()とほぼ同じ機能となります。
※ ちなみに、ftell()と、fgetpos()の違いは、型がfpos_t型かlong型かの違いです。
VC8では、fpos_t型は、_int64で定義されている為、
long型に比べて、ファイルサイズが2GBを超えても大丈夫なわけです。
なので、fgetpos()を使用したほうが安全と言えるかもしれません。
( さらに補足 ・・ _int64型の最大値は8エクサです! ギガ < テラ < ペタ < エクサ )
指定したファイル「test.txt」のファイルサイズを取得します。 |
---|
#include <stdio.h> int main(void) { FILE *fp; char *fname = "test.txt"; fpos_t sz; fp = fopen( fname, "rb" ); if( fp == NULL ){ printf( "%sファイルが開けません¥n", fname ); return -1; } fseek( fp, 0, SEEK_END ); fgetpos( fp, &sz ); printf( "%sファイルのサイズ:%d バイト", fname, sz ); fclose( fp ); return 0; } |
test.txtファイルのサイズ:50 バイト |
---|
というように、「test.txt」ファイルのサイズが表示されるはずです。 まず、fseek()でファイル終端(SEEK_END)までファイル位置を移動させ、 ftell()で、現在のファイル位置を取得しています。 それと、fopen()で開く際には、バイナリモードで開くようにしましょう。 環境によって変わるらしいですが、バイナリモードのほうが確実です。 |