C言語 ファイル位置の設定 - stdio.h - [ fsetpos ]

2008.09.27 Saturday | by LRESULT


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

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

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

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


fsetpos
書式 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を設定し
ファイル位置を先頭に戻してから読み込みます。

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


コメントする











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

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

トラックバック