fseek

提供: RAD Studio
移動先: 案内検索

stdio.h:インデックス への移動

ヘッダー ファイル

stdio.h

カテゴリ

入出力ルーチン

プロトタイプ

int fseek(FILE *stream, long offset, int whence);
int _fseeki64(FILE *stream, __int64 offset, int whence);

説明

ストリーム上のファイル ポインタの位置を変更します。

fseek は、ストリームに関連付けられたファイル ポインタを、whence で指定されたファイル位置から offset バイト移動した新しい位置に設定します。 テキスト モードのストリームの場合、offset は 0ftell で返される値でなければなりません。

whence012 のいずれかの値(stdio.h で定義された以下の 3 つのシンボル定数を表す値)でなければなりません。

SEEK_SET

0

ファイルの先頭

  • ストリーム がバイナリ モードのとき、fseek はファイル ポインタをファイルの先頭から offset バイトの位置に設定します。
  • ストリーム がテキスト モードのとき、fseekoffset 値にしたがってファイル ポインタを設定します。offset は、ゼロ(ファイルの先頭を表します)か、ftell から返された値(ファイル中のそれ以外の位置を表します)でなければなりません。この値はバイト数ではないため、加算や減算をすることはできません。

SEEK_CUR

1

現在のファイル ポインタの位置

  • ストリーム がバイナリ モードのとき、fseek は現在のファイル ポインタの位置に offset バイト追加します。
  • ストリーム がテキスト モードのとき、offset はゼロ(ファイル中の現在の位置を表します)でなければなりません。

SEEK_END

2

ファイルの末尾

  • ストリーム がバイナリ モードのとき、fseek はファイルの末尾から offset バイト追加します(任意の数の NULL 文字の後にファイル ポインタを配置する場合もあります)。
  • ストリーム がテキスト モードのとき、offset はゼロ(ファイルの末尾を表します)でなければなりません。

fseek は、ungetc を使って押し戻された文字をすべて廃棄します。 fseek はストリーム入出力に使用するものです。ファイル ハンドル入出力には lseek を使用してください。

fseek を行った後の、更新ファイルに対する次の操作は、入力と出力のどちらでもかまいません。

戻り値

fseek は、ポインタの移動が成功すれば 0 を、失敗すれば 0 以外を返します。

エラーが返された場合には、グローバル変数 errno に以下のいずれかの値が設定されています。

EBADF

ファイル ポインタが不正です

EINVAL

引数が無効です

ESPIPE

デバイスのシークが無効です


#include <stdio.h>
long filesize(FILE *stream);
int main(void)
{
   FILE *stream;
   stream = fopen("MYFILE.TXT", "w+");
   fprintf(stream, "This is a test");
   printf("Filesize of MYFILE.TXT is %ld bytes\n", filesize(stream));
   fclose(stream);
   return 0;
}
long filesize(FILE *stream)
{
   long curpos, length;
   curpos = ftell(stream);
   fseek(stream, 0L, SEEK_END);
   length = ftell(stream);
   fseek(stream, curpos, SEEK_SET);
   return length;
}

移植性

POSIX Win32 ANSI C ANSI C++

+

+

+

+