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