獲得和設置流指針(get and put stream pointers)
所有輸入/輸出流對象(i/o streams objects)都有至少一個流指針:
ifstream, 類似istream, 有一個被稱為get pointer的指針,指向下一個將被讀取的元素。
ofstream, 類似 ostream, 有一個指針 put pointer ,指向?qū)懭胂乱粋元素的位置。
fstream, 類似 iostream, 同時繼承了get 和 put
我們可以通過使用以下成員函數(shù)來讀出或配置這些指向流中讀寫位置的流指針:
tellg() 和 tellp()
這兩個成員函數(shù)不用傳入?yún)?shù),返回pos_type 類型的值(根據(jù)ANSI-C++ 標準) ,就是一個整數(shù),代表當前get 流指針的位置 (用tellg) 或 put 流指針的位置(用tellp).
seekg() 和seekp()
這對函數(shù)分別用來改變流指針get 和put的位置。兩個函數(shù)都被重載為兩種不同的原型:
seekg ( pos_type position );
seekp ( pos_type position );
使用這個原型,流指針被改變?yōu)橹赶驈奈募_始計算的一個絕對位置。要求傳入的參數(shù)類型與函數(shù) tellg 和tellp 的返回值類型相同。
seekg ( off_type offset, seekdir direction );
seekp ( off_type offset, seekdir direction );
使用這個原型可以指定由參數(shù)direction決定的一個具體的指針開始計算的一個位移(offset)。它可以是:
ios::beg |
從流開始位置計算的位移 |
ios::cur |
從流指針當前位置開始計算的位移 |
ios::end |
從流末尾處開始計算的位移 |
流指針get 和put 的值對文本文件(text file)和二進制文件(binary file)的計算方法都是不同的,因為文本模式的文件中某些特殊字符可能被修改。由于這個原因,建議對以文本文件模式打開的文件總是使用seekg 和 seekp的第一種原型,而且不要對tellg 或 tellp 的返回值進行修改。對二進制文件,你可以任意使用這些函數(shù),應該不會有任何意外的行為產(chǎn)生。
以下例子使用這些函數(shù)來獲得一個二進制文件的大。
// 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;
}
size of example.txt is 40 bytes.
相關推薦:等考C++備考之如何學習C++與面向?qū)ο螅航M合北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |