std::fsetpos
来自 cppreference.com
定义在头文件 <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
|