C++ 標準流,文件流
- ■ 標準輸入,輸出流,
- ■ 文件流(ofstream寫入,ifstream讀取,fstream創建-寫入-讀取)
- ■ open()
- ■ ofstream
- ■ ifstream
- ■ 流插入<<
- ■ 文件位置指針
■ 標準輸入,輸出流,
iostream 標準庫,它提供了 cin 和 cout 方法
■ 文件流(ofstream寫入,ifstream讀取,fstream創建-寫入-讀取)
1. C++ 源代碼文件中包含頭文件 <iostream> 和 <fstream>。
2.
數據類型 | 描述 |
---|---|
ofstream | 該數據類型表示輸出文件流,用于創建文件并向文件寫入信息。 |
ifstream | 該數據類型表示輸入文件流,用于從文件讀取信息。 |
fstream | 該數據類型通常表示文件流,且同時具有 ofstream 和 ifstream 兩種功能,這意味著它可以創建文件,向文件寫入信息,從文件讀取信息。 |
■ open()
void open(const char *filename, ios::openmode mode);
模式標志 | 描述 |
---|---|
ios::app | 追加模式。所有寫入都追加到文件末尾。 |
ios::ate | 文件打開后定位到文件末尾。 |
ios::in | 打開文件用于讀取。 |
ios::out | 打開文件用于寫入。 |
ios::trunc | 如果該文件已經存在,其內容將在打開文件之前被截斷,即把文件長度設為 0。 |
■ ofstream
以寫入模式打開文件,并希望截斷文件,以防文件已存在
ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc );
■ ifstream
打開一個文件用于讀寫
ifstream afile;
afile.open("file.dat", ios::out | ios::in );
■ 流插入<<
流插入運算符( << )向文件寫入信息
ifstream afile;
afile.open("file.dat", ios::out | ios::in );
示例一:
#include <fstream>
#include <iostream>
using namespace std;int main ()
{char data[100];// 以寫模式打開文件ofstream outfile;outfile.open("afile.dat");cout << "Writing to the file" << endl;cout << "Enter your name: "; cin.getline(data, 100);// 向文件寫入用戶輸入的數據outfile << data << endl;cout << "Enter your age: "; cin >> data;cin.ignore();// 再次向文件寫入用戶輸入的數據outfile << data << endl;// 關閉打開的文件outfile.close();// 以讀模式打開文件ifstream infile; infile.open("afile.dat"); cout << "Reading from the file" << endl; infile >> data; // 在屏幕上寫入數據cout << data << endl;// 再次從文件讀取數據,并顯示它infile >> data; cout << data << endl; // 關閉打開的文件infile.close();return 0;
}
當上面的代碼被編譯和執行時,它會產生下列輸入和輸出:$./a.out
Writing to the file
Enter your name: Zara
Enter your age: 9
Reading from the file
Zara
9
■ 文件位置指針
istream 和 ostream 都提供了用于重新定位文件位置指針的成員函數。
這些成員函數包括關于
istream 的 seekg(“seek get”)
ostream 的 seekp(“seek put”)
seekg 和 seekp 的參數通常是一個長整型。
// 定位到 fileObject 的第 n 個字節(假設是 ios::beg)
fileObject.seekg( n );// 把文件的讀指針從 fileObject 當前位置向后移 n 個字節
fileObject.seekg( n, ios::cur );// 把文件的讀指針從 fileObject 末尾往回移 n 個字節
fileObject.seekg( n, ios::end );// 定位到 fileObject 的末尾
fileObject.seekg( 0, ios::end );