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 是 null 指针,或者,如果 origin 不是下述一个允许的值, fseek 和 _fseeki64 调用无效参数处理程序,如 参数验证所述。 如果执行允许继续,对 EINVAL 的这些功能集 errno 并且返回 -1。

备注

fseek 和 _fseeki64 函数文件指针的移动 (如果有) 与 stream 到新位置。 origin的 offset 字节*。*在流中的下操作在新位置出现。 在流打开状态以进行更新,因此下操作可能是读取或写入。 参数原点在 STDIO.H 必须是下列常量之一,定义:

  • SEEK_CUR
    文件指针的当前位置。

  • SEEK_END
    文件结尾。

  • SEEK_SET
    文件开头。

可以使用 fseek 和 _fseeki64 指针重新定位在文件中的任意位置。 指针可能在文件尾以外的进行标识。 fseek 和 _fseeki64清除文件结尾指示符并对所有的 ungetc 的效果调用 stream。

当文件仅追加的数据中打开,取决于当前文件位置由最后一个 I/O 操作,而下编写将出现的位置。 如果 I/O 操作在仅追加的方式打开的文件没有发生,文件位置为文件的开头。

对于文本模式下打开的流,因为支持返回换行符转换可能导致 fseek 和 _fseeki64导致意外的结果,, 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

要求

功能

必需的头

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