命名空间
变体
操作

std::fsetpos

来自 cppreference.com
< cpp‎ | io‎ | c
 
 
 
 
定义在头文件 <cstdio>
int fsetpos( std::FILE* stream, const std::fpos_t* pos );

根据 pos 指向的值设置 C 文件流 stream 的文件位置指示器和多字节解析状态(如果有)。

除了建立新的解析状态和位置外,调用此函数还会撤消 std::ungetc 的影响并清除文件结束状态(如果已设置)。

如果发生读写错误,流的错误指示器(std::ferror)将被设置。

内容

[编辑] 参数

stream - 要修改的文件流
pos - 指向从 std::fgetpos 调用(在与同一文件关联的流上调用)获得的 fpos_t 对象的指针

[编辑] 返回值

0 成功时,否则为非零值。此外,在失败时设置 errno

[编辑] 注释

在广义流中寻址到非末尾位置后,对任何输出函数的下一个调用可能会使文件的剩余部分变得不确定,例如通过输出不同长度的多字节序列。

[编辑] 示例

#include <cstdio>
#include <cstdlib>
 
int main()
{
    // Prepare an array of floating-point values.
    const int SIZE = 5;
    double A[SIZE] = {1., 2., 3., 4., 5.};
    // Write array to a file.
    std::FILE * fp = std::fopen("test.bin", "wb");
    std::fwrite(A, sizeof(double), SIZE, fp);
    std::fclose(fp);
 
    // Read the values into array B.
    double B[SIZE];
    fp = std::fopen("test.bin", "rb");
    std::fpos_t pos;
    if (std::fgetpos(fp, &pos) != 0)      // current position: start of file
    {
       std::perror("fgetpos()");
       std::fprintf(stderr, "fgetpos() failed in file %s at line # %d\n",
                    __FILE__, __LINE__-3);
       std::exit(EXIT_FAILURE);
    }
 
    int ret_code = std::fread(B, sizeof(double), 1, fp);      // read one value
    // current position: after reading one value
    std::printf("%.1f; read count = %d\n", B[0], ret_code);   // print one value and ret_code
 
    if (std::fsetpos(fp, &pos) != 0)   // reset current position to start of file
    {
       if (std::ferror(fp))
       {
          std::perror("fsetpos()");
          std::fprintf(stderr, "fsetpos() failed in file %s at line # %d\n",
                       __FILE__, __LINE__-5);
          std::exit(EXIT_FAILURE);
       }
    }
 
    ret_code = std::fread(B, sizeof(double), 1, fp);         // re-read first value
    std::printf("%.1f; read count = %d\n", B[0], ret_code);  // print one value and ret_code
    std::fclose(fp);
 
    return EXIT_SUCCESS; 
}

输出

1.0; read count = 1
1.0; read count = 1

[编辑] 另请参阅

获取文件位置指示器
(函数) [编辑]
返回当前文件位置指示器
(函数) [编辑]
将文件位置指示器移动到文件中的特定位置
(函数) [编辑]
C 文档 for fsetpos