C言語 ファイル位置の設定 ファイルサイズの取得 - stdio.h - [ fseek ]

2008.09.28 Sunday | by LRESULT


ァイル位置の設定は、fseek()を使用します。

ファイル位置とは、ファイルにおけるカーソル位置のようなもので
読み込み書き込みの規準となる位置のことです。


fseek
書式 int fseek( FILE *fp, long offset, int origin )
機能 ファイル位置を原点位置から移動させ設定する
引数 FILE *fp : ファイル(ストリーム)ポインタ
long offset : 指定位置からのズレ量
int origin : 原点位置の種類
戻り値 成功すると、0を返し、
失敗すると、0以外を返します。



また、引数origin の種類には以下のものが定義されています。


第3引数 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()で開く際には、バイナリモードで開くようにしましょう。
環境によって変わるらしいですが、バイナリモードのほうが確実です。

カテゴリ:C言語 stdio.h | 22:30 | comments(0) | trackbacks(0) | -


コメントする











この記事のトラックバックURL

http://simd.jugem.jp/trackback/106

トラックバック