• tellg() 和tellp()
这两个成员函数不用传入参数,返回pos_type 类型的值(根据ANSI-C++ 标准) ,
就是一个整数,代表当前get 流指针的位置(用tellg) 或put 流指针的位置(用
tellp).
• seekg() 和seekp()
这对函数分别用来改变流指针get 和put 的位置。两个函数都被重载为两种不同的
原型:
seekg ( pos_type position );
seekp ( pos_type position );
使用这个原型,流指针被改变为指向从文件开始计算的一个绝对位置。要求传入的
参数类型与函数tellg 和tellp 的返回值类型相同。
seekg ( off_type offset, seekdir direction );
seekp ( off_type offset, seekdir direction );
使用这个原型可以指定由参数direction 决定的一个具体的指针开始计算的一个位
移(offset)。它可以是:
流指针get 和put 的值对文本文件(text file)和二进制文件(binary file)的计算方法
都是不同的,因为文本模式的文件中某些特殊字符可能被修改。由于这个原因,建议对以文
本文件模式打开的文件总是使用seekg 和seekp 的第一种原型,而且不要对tellg 或
tellp 的返回值进行修改。对二进制文件,你可以任意使用这些函数,应该不会有任何意外
的行为产生。
以下例子使用这些函数来获得一个二进制文件的大小:
二进制文件(Binary files)
ios::beg 从流开始位置计算的位移
ios::cur 从流指针当前位置开始计算的位移
ios::end 从流末尾处开始计算的位移
// obtaining file size
#include
#include
const char * filename = "example.txt";
int main () {
long l,m;
ifstream file (filename,
ios::in|ios::binary);
l = file.tellg();
file.seekg (0, ios::end);
m = file.tellg();
file.close();
cout << "size of " << filename;
cout << " is " << (m-l) << "
bytes.\n";
return 0;
}