二進制文件以基本類型數據在內存的二進制表示形式存放數據,不對寫入或讀出進行格式轉換。
二進制文件的讀寫方式由程序控制。
打開二進制文件用binary方式。
二進制文件是隨機存儲的。
隨機訪問流:
流的狀態表示:流的內容,長度和操作位置。
istream類操作流讀指針的成員函數:
istream & istream :: seekg(long pos);
作用 讀指針從流的起始位置向後移動由pos指定字節。
istream & istream :: seekg(long off, ios::seek_dir);
作用 讀指針從流seek_dir的位置移動off指定字節。
ios::seek_dir值: |
|
cur |
相對於當前讀指針所指定的當前位置 |
beg |
相對於流的開始位置 |
end |
相對於流的結尾處 |
enum ios::seek_dir{beg = 0;cur = 1;end = 2}; |
istream & istream :: tellg();
作用 返回讀指針當前位置值。
例子:
istream input ;
……
input . seekg ( - 10 , ios :: cur ) ;
//讀指針位置以當前位置爲基準,向前移動10個字節。
input . seekg ( 10 , ios :: cur ) ;
//讀指針位置以當前位置爲基準,向後移動10個字節。
input . seekg ( -10 , ios :: beg ) ;
//讀指針從流開始位置向後移動10個字節。
input . seekg ( 10 , ios :: end) ;
//讀指針位置以流尾爲基準,向前移動10個字節。
ostream 類操作流瀉指針的成員函數。
ostream & ostream :: seekp(long pos); |
作用 寫指針從流起始位置向後移動指定pos字節 |
ostream & ostream :: seekp(long off , ios::seek_dir); |
作用 寫指針從流的seek_dir位置移動off個字節 |
ostream & ostream :;tellp(); |
作用 返回當前寫指針所在的位置值。 |
適合二進制操作的成員函數:
istream類中三個操作字節數據的成員函數
istream & istream :: get(char &c);
作用 從流中提取一個字節數據,更新對象c。
int istream :: get();
作用 函數值返回流中一個字節。
Istream & istream :: read(char *buf,int n);
作用 從流中提取n個字節數據,更新對象buf。
ostream 類中兩個操作字節數據成員函數
ostream & ostream ::put(char c);
作用 向流插入一個字節數據.
ostream & ostream :: write(char *buf,int n);
作用 向流中插入對象buf,由第二個參數指定數目字節數據。
例:#include <iostream> #include <fstream> using namespace std;
void main()
{
char chararr[30],inchar[30];
cout << "請輸入" << endl;
cin >> chararr;
//寫
ofstream out("data.dat", ios::out|ios::binary);
out.write(chararr, 30);
out.close();
//讀
ifstream in("data.dat", ios::in | ios::binary);
in.read(inchar, 30);
cout << "從二進制文件讀取出來的:" << inchar << endl;
in.close();
}
運行結果: