std::ftell
来自cppreference.com
在标头 <cstdio> 定义
|
||
long ftell( std::FILE* stream ); |
||
返回文件流 stream
的文件位置指示器的当前值。
若流以二进制模式打开,则此函数获得的值是距文件起始的字节数。
若流以文本模式打开,则此函数的返回值是未指定的,而且仅若作为 std::fseek 的输入才有意义。
参数
stream | - | 要检验的文件流 |
返回值
成功时为文件位置指示器,若失败出现则为 -1L。失败时亦设置 errno。
示例
演示带有错误检查的 std::ftell()
。在一个文件上写入并读取一些浮点值。
运行此代码
#include <cstdio> #include <cstdlib> #include <iostream> // 如果不满足条件,则输出错误消息并退出程序。 void check(bool condition, const char* func, int line) { if (condition) return; std::perror(func); std::cerr << func << " failed in file " << __FILE__ << " at line # " << line - 1 << '\n'; std::exit(EXIT_FAILURE); } int main() { // 准备一个浮点值的数组。 constexpr int SIZE {5}; double A[SIZE] = {1.1, 2.2, 3.3, 4.4, 5.5}; // 将数组写入文件。 const char* fname = "/tmp/test.bin"; FILE* file = std::fopen(fname, "wb"); check(file != NULL, "fopen()", __LINE__); const int write_count = std::fwrite(A, sizeof(double), SIZE, file); check(write_count == SIZE, "fwrite()", __LINE__); std::fclose(file); // 将这些浮点值读入数组 B。 double B[SIZE]; file = std::fopen(fname, "rb"); check(file != NULL, "fopen()", __LINE__); long pos = std::ftell(file); // 文件起始的位置指示器 check(pos != -1L, "ftell()", __LINE__); std::cout << "pos: " << pos << '\n'; const int read_count = std::fread(B, sizeof(double), 1, file); // 读取一个浮点值 check(read_count == 1, "fread()", __LINE__); pos = std::ftell(file); // 文件起始的位置指示器 check(pos != -1L, "ftell()", __LINE__); std::cout << "pos: " << pos << '\n'; std::cout << "B[0]: " << B[0] << '\n'; // 打印一个浮点值 return EXIT_SUCCESS; }
可能的输出:
pos: 0 pos: 8 B[0]: 1.1
参阅
获取文件位置指示器 (函数) | |
移动文件位置指示器到文件中的指定位置 (函数) | |
移动文件位置指示器到文件中的指定位置 (函数) | |
返回输入位置指示器 ( std::basic_istream<CharT,Traits> 的公开成员函数) | |
返回输出位置指示器 ( std::basic_ostream<CharT,Traits> 的公开成员函数) |