C++ 笔记(21)— 处理文件(文件打开、关闭、读取、写入)
C++ 提供了 std::fstream ,旨在以獨立于平臺的方式訪問文件。 std::fstream 從 std::ofstream 那里繼承了寫入文件的功能,并從 std::ifstream 那里繼承了讀取文件的功能。換句話說, std::fstream 提供了讀寫文件的功能。
| 數據類型 | 描述 |
|---|---|
| ofstream | 該數據類型表示輸出文件流,用于創建文件并向文件寫入信息。 |
| ifstream | 該數據類型表示輸入文件流,用于從文件讀取信息。 |
| fstream | 該數據類型通常表示文件流,且同時具有 ofstream 和 ifstream 兩種功能,這意味著它可以創建文件,向文件寫入信息,從文件讀取信息。 |
要使用 std::fstream 類或其基類,需要包含頭文件 <fstream> :
#include <fstream>
在 C++ 編程中,我們使用流插入運算符( << )向文件寫入信息,就像使用該運算符輸出信息到屏幕上一樣。唯一 不同的是,在這里使用的是 ofstream 或 fstream 對象,而不是 cout 對象。
同理,我們使用流提取運算符( >> )從文件讀取信息,就像使用該運算符從鍵盤輸入信息一樣。唯一不同的是,在這里您使用的是 ifstream 或 fstream 對象,而不是 cin 對象。
1. 使用open( )和close( )打開和關閉文件
要使用 fstream 、 ofstream 或 ifstream 類,需要使用方法 open() 打開文件, open() 函數是 fstream 、 ifstream 和 ofstream 對象的一個成員。
fstream myFile;
myFile.open("HelloFile.txt",ios_base::in|ios_base::out|ios_base::trunc);if (myFile.is_open()) // check if open() succeeded
{// do reading or writing heremyFile.close();
}
open() 接受兩個參數:
- 第一個是要打開的文件的路徑和名稱(如果沒有提供路徑,將假定為應用程序的當前目錄設置);
- 第二個是文件的打開模式。
| 模式標志 | 描述 |
|---|---|
| ios::app | 追加模式。所有寫入都追加到文件末尾 |
| ios::ate | 文件打開后定位到文件末尾 |
| ios::in | 以只讀方式打開文件 |
| ios::out | 以只寫方式打開文件 |
| ios::trunc | 導致現有文件被覆蓋,這是默認設置 |
| ios_base::binary | 創建二進制文件(默認為文本文件) |
可以把以上兩種或兩種以上的模式結合使用。例如,如果您想要以寫入模式打開文件,并希望截斷文件,以防文件已存在,那么您可以使用下面的語法:
ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc );
類似地,您如果想要打開一個文件用于讀寫,可以使用下面的語法:
ifstream afile;
afile.open("file.dat", ios::out | ios::in );
在上述代碼中,指定了模式 ios_base::trunc (即便指定的文件存在,也重新創建它)、 ios_base::in (可讀取文件)和 ios_base::out (可寫入文件)。
注意到在上述代碼中使用了 is_open() ,它檢測 open() 是否成功。
注意:保存到文件時,必須使用 close() 關閉文件流。 close() 函數是 fstream 、 ifstream 和 ofstream 對象的一個成員。
還有另一種打開文件流的方式,那就是使用構造函數:
fstream myFile("HelloFile.txt",ios_base::in|ios_base::out|ios_base::trunc);
如果只想打開文件進行寫入,可使用如下代碼:
ofstream myFile("HelloFile.txt", ios_base::out);
如果只想打開文件進行讀取,可使用如下代碼:
ifstream myFile("HelloFile.txt", ios_base::in);
注意:無論是使用構造函數還是成員方法 open() 來打開文件流,都建議您在使用文件流對象前,使用 open() 檢查文件打開操作是否成功。
2. 使用open( )創建文本文件并使用運算符<<寫入文本
有打開的文件流后,便可使用運算符 << 向其中寫入文本。
#include <fstream>
#include <iostream>
using namespace std;int main()
{ofstream myFile;myFile.open("HelloFile.txt", ios_base::out);if (myFile.is_open()){cout << "File open successful" << endl;myFile << "My first text file!" << endl;myFile << "Hello file!" << endl;cout << "Finished writing to file, will close now" << endl;myFile.close();}return 0;
}
第 8 行以 ios_base::out 模式(即只寫模式)打開文件。第 10 行檢查 open( ) 是否成功,然后使用插入運算符 << 寫入該文件流。最后,第 18 行關閉文件流。
3. 使用open( )和運算符>>讀取文本文件
要讀取文件,可使用 fstream 或 ifstream ,并使用標志 ios_base::in 打開它。
#include <fstream>
#include <iostream>
#include <string>
using namespace std;int main()
{ifstream myFile;myFile.open("HelloFile.txt", ios_base::in);if (myFile.is_open()){cout << "File open successful. It contains: " << endl;string fileContents;while (myFile.good()){getline (myFile, fileContents);cout << fileContents << endl;}cout << "Finished reading file, will close now" << endl;myFile.close();}elsecout << "open() failed: check if file is in right folder" << endl;return 0;
}
請注意,這里沒有使用提取運算符 >> 將文件內容直接讀取到第 18 行使用 cout 顯示的 string ,而是使用 getline() 從文件流中讀取輸入。
總結
以上是生活随笔為你收集整理的C++ 笔记(21)— 处理文件(文件打开、关闭、读取、写入)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 切痣多少钱啊?
- 下一篇: 2022-2028年中国四氟化碳产业研究