C言語 ファイル位置の取得 - stdio.h - [ fgetpos ]

2008.09.27 Saturday | by LRESULT


ァイル位置の取得には、fgetpos()を使用します。

まず、ファイル位置とは、なに? というとこから。

例えば、fopen()を使用してファイルを読み取りモード "r" で開いた直後では、
ファイル位置は先頭の0です。
そこから、fgetc()で5文字読み取った後では、ファイル位置は5となります。
書き込んだ場合でも同様で、5文字書き込んだ後では、ファイル位置は5となります。

つまり、カーソル位置のようなもので、
正確にはファイル位置指示子といい、FILE型変数の指している位置となります。


fgetpos
書式 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()でファイル位置が変更されている事が分かります。

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


コメントする











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

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

トラックバック