std::ftell
来自 cppreference.com
定义在头文件 <cstdio> 中 |
||
long ftell( std::FILE* stream ); |
||
返回文件流 stream
的文件位置指示器的当前值。
如果流以二进制模式打开,则此函数获取的值是从文件开头算起的字节数。
如果流以文本模式打开,则此函数返回的值未指定,并且仅作为 std::fseek 的输入有效。
内容 |
[编辑] 参数
stream | - | 要检查的文件流 |
[编辑] 返回值
成功时为文件位置指示器,失败时为 -1L。 失败时还会设置 errno。
[编辑] 示例
演示 std::ftell()
和错误检查。 向文件写入,然后从中读取一些浮点数(FP)值。
运行此代码
#include <cstdio> #include <cstdlib> #include <iostream> // If the condition is not met then exit the program with error message. 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() { // Prepare an array of FP values. constexpr int SIZE {5}; double A[SIZE] = {1.1, 2.2, 3.3, 4.4, 5.5}; // Write array to a file. 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); // Read the FP values into array B. double B[SIZE]; file = std::fopen(fname, "rb"); check(file != NULL, "fopen()", __LINE__); long pos = std::ftell(file); // position indicator at start of file check(pos != -1L, "ftell()", __LINE__); std::cout << "pos: " << pos << '\n'; const int read_count = std::fread(B, sizeof(double), 1, file); // read one FP value check(read_count == 1, "fread()", __LINE__); pos = std::ftell(file); // position indicator after reading one FP value check(pos != -1L, "ftell()", __LINE__); std::cout << "pos: " << pos << '\n'; std::cout << "B[0]: " << B[0] << '\n'; // print one FP value return EXIT_SUCCESS; }
可能的输出
pos: 0 pos: 8 B[0]: 1.1
[编辑] 另请参阅
获取文件位置指示器 (函数) | |
将文件位置指示器移动到文件中的特定位置 (函数) | |
将文件位置指示器移动到文件中的特定位置 (函数) | |
返回输入位置指示器 ( std::basic_istream<CharT,Traits> 的公有成员函数) | |
返回输出位置指示器 ( std::basic_ostream<CharT,Traits> 的公有成员函数) | |
C 文档 for ftell
|