次の方法で共有


fseek, _fseeki64

指定した場所にファイル ポインターを移動します。

構文

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

パラメーター

stream
FILE 構造体へのポインター。

offset
origin から読み取られたバイト数。

origin
最初の位置。

戻り値

正常に終了した場合、fseek および _fseeki64 は 0 を返します。 それ以外の場合は、0 以外の値を返します。 シーク非対応のデバイスでは、戻り値は未定義です。 streamが null ポインターの場合、またはoriginが以下で説明する使用可能な値の 1 つでない場合は、「Parameter 検証で説明されているように、無効なパラメーター ハンドラーfseekおよび_fseeki64呼び出します。 実行の継続が許可された場合、これらの関数は errnoEINVAL に設定し、-1 を返します。

解説

fseek関数と_fseeki64関数は、streamに関連付けられているファイル ポインター (存在する場合) を、originからoffsetバイトの新しい場所に移動します。 ストリームの次の操作は、新しい場所で行われます。 更新用に開かれているストリームでの次の操作は読み取りまたは書き込みのいずれかです。 引数 origin は、STDIO.H で定義されている、次の定数のいずれかである必要があります。

origin 値 意味
SEEK_CUR ファイル ポインターの現在の位置。
SEEK_END ファイルの終わり。
SEEK_SET ファイルの先頭。

fseek_fseeki64 を使用して、ファイル内の任意の場所にポインターを移動できます。 ポインターは、ファイルの末尾を越えて配置することもできます。 fseek および _fseeki64 では、ファイルの終わりインジケーターをクリアし、stream に対する ungetc 呼び出しの前のすべての効果を反転します。

データを追加するためにファイルを開く場合、現在のファイルの位置は、次の書き込みが発生する場所ではなく最後の I/O 操作によって決まります。 追加のために開かれたファイルで I/O 操作がまだ発生していない場合、ファイルの位置はファイルの先頭です。

テキスト モードで開いたストリームの場合、fseek および _fseeki64 の使用は制限されます。これは、復帰と改行の変換により、fseek および _fseeki64 で予期しない結果が発生する可能性があるためです。 テキスト モードで開かれたストリーム上でのみ fseek および _fseeki64 の動作が保証されます。

  • 元の値のいずれかに対して相対的なオフセット 0 でシークします。

  • fseek または _ftelli64 を使用するとき、または _fseeki64 を使用するときは、ftell に対する呼び出しから返されるオフセット値を使用してファイルの先頭からシークします。

テキスト モードでも、Ctrl + Z は入力時に EOF (EOF: end-of-file) 文字として解釈されます。 読み取りおよび書き込みの両方のために開かれたファイルでは、fopen および関連するすべてのルーチンが、ファイル末尾に Ctrl + Z があるかどうかを確認し、削除できる場合は削除します。 fseekftellまたは_fseeki64_ftelli64の組み合わせを使用して、Ctrl + Z で終わるファイル内を移動すると、ファイルの末尾付近でfseekまたは_fseeki64が不適切に動作する可能性があるため、削除されます。

CRT がバイト オーダー マーク (BOM) で始まるファイルを開くと、ファイル ポインターは BOM の後に配置されます。 (つまり、ファイルの実際のコンテンツの先頭に配置されます)。 ファイルの先頭に fseek する必要がある場合は、 ftell を使用して初期位置を取得し、0 ではなくその位置に fseek します。

この関数では、実行中に他のスレッドをロックするので、スレッド セーフです。 ロックしないバージョンについては、「_fseek_nolock_fseeki64_nolock」を参照してください。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。

要件

機能 必須ヘッダー
fseek <stdio.h>
_fseeki64 <stdio.h>

互換性の詳細については、「 Compatibility」を参照してください。

// crt_fseek.c
// This program opens the file FSEEK.OUT and
// moves the pointer to the file's beginning.

#include <stdio.h>

int main( void )
{
   FILE *stream;
   char line[81];
   int  result;

   if ( fopen_s( &stream, "fseek.out", "w+" ) != 0 )
   {
      printf( "The file fseek.out was not opened\n" );
      return -1;
   }
   fprintf( stream, "The fseek begins here: "
                    "This is the file 'fseek.out'.\n" );
   result = fseek( stream, 23L, SEEK_SET);
   if( result )
      perror( "Fseek failed" );
   else
   {
      printf( "File pointer is set to middle of first line.\n" );
      fgets( line, 80, stream );
      printf( "%s", line );
    }
   fclose( stream );
}
File pointer is set to middle of first line.
This is the file 'fseek.out'.

関連項目

ストリーム入出力
fopen, _wfopen
ftell, _ftelli64
_lseek, _lseeki64
rewind