共用方式為


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。 否則,它會傳回非零的值。 在裝置上的搜尋觀念,傳回的值未定義。 如果stream是空值的指標,或者如果origin不是允許的值,如下所述,其中fseek和_fseeki64中所述,叫用無效的參數處理常式中, 參數驗證。 如果執行,則允許繼續執行,這些函式會設定errno到EINVAL ,並傳回-1。

備註

fseek和_fseeki64移動檔案指標 (如果有的話) 相關聯的函式stream到新的位置是offset位元組origin*.* 在資料流的下一個作業會發生在新的位置。 在開啟進行更新的資料流,讀取或寫入,可以是下一個作業。 引數的來源必須是下列的常數,STDIO 所述的其中一個。H:

  • SEEK_CUR
    檔案指標目前位置。

  • SEEK_END
    檔案結尾。

  • SEEK_SET
    檔案的開頭。

您可以使用fseek和_fseeki64以調整指標位置在檔案中的任何地方。 指標也可以置於超出檔案結尾。 fseek與_fseeki64清除檔案結尾標記,並取消任何之前的效果ungetc對會呼叫stream。

當檔案開啟時附加資料時,目前的檔案位置依據上次的 I/O 作業,不是將發生下次寫入的位置。 如果尚未開啟附加的檔案發生任何 I/O 作業,這個檔案位置是檔案開頭。

在文字模式中開啟資料流fseek和_fseeki64只擁有少數使用,因為會造成換行字元 return–linefeed 轉譯fseek和_fseeki64來產生不可預期的結果。 唯一fseek和_fseeki64奏效,在文字模式中所開啟的資料流上的作業:

  • 搜尋位移為 0,相對於任何原始值。

  • 搜尋從檔案開始處的位移值傳回呼叫的ftell時使用fseek或_ftelli64時使用_fseeki64。

也在文字模式中,CTRL + Z 組合鍵會解譯成輸入的檔案結尾字元。 在 [檔案開啟進行讀取/寫入, fopen和所有相關的常式會檢查 CTRL + Z 結尾的檔案,並盡可能將它移除。 這是因為使用的組合fseek和ftell或_fseeki64和_ftelli64、 CTRL + Z 組合鍵以結束可能會造成檔案內移動fseek或_fseeki64檔案的結尾附近不當的行為。

CRT 會開啟檔案開頭的位元組順序標記 (BOM),當檔案指標定位於 BOM 之後 (也就是檔案的實際內容的開頭)。 如果您必須fseek檔案的開頭,如果要使用ftell以取得初始位置和fseek給它,而不是以位置 0。

這個函式在執行期間鎖定其他執行緒,因此執行緒安全。 非鎖定版本,請參閱_fseek_nolock _fseeki64_nolock

需求

Function

所需的標頭

fseek

<stdio.h>

_fseeki64

<stdio.h>

其他的相容性資訊,請參閱相容性在簡介中。

範例

// 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 );
}
      

.NET Framework 對等用法

請參閱

參考

資料流 I/O

fopen _wfopen

ftell _ftelli64

_lseek _lseeki64

rewind