如何在 C++ 中將文字追加到檔案
-
使用
std::ofstream
和open()
方法將文字追加到檔案中 -
使用
std::fstream
和open()
方法將文字追加到一個檔案中 -
使用
write()
方法與std::fstream
和open()
一起將文字新增到檔案中
本文介紹了多種在 C++ 中將文字追加到檔案中的方法。
使用 std::ofstream
和 open()
方法將文字追加到檔案中
首先,我們應該建立一個 ofstream
物件,然後呼叫它的成員函式 open()
。這個方法的第一個引數是字串型別的檔名作為,對於第二個引數,我們可以通過指定下表所示的預定義常量來定義開啟模式。
常量 | 解釋 |
---|---|
std::ios_base::app |
在每次寫入前都會尋找到流的末端 |
std::ios_base::binary |
以二進位制模式開啟 |
std::ios_base::in |
開啟檔案進行讀操作 |
std::ios_base::out |
開啟檔案進行寫入操作 |
std::ios_base::trunc |
開啟時丟棄流的內容 |
std::ios_base::ate |
開啟後立即尋求流的盡頭 |
請注意,下面的程式碼示例在當前工作目錄下建立了一個名為 tmp.txt
的檔案。你可以傳遞一個檔案的完整路徑來建立或追加到不同的位置。
#include <iostream>
#include <fstream>
using std::cout; using std::ofstream;
using std::endl; using std::string;
int main()
{
string filename("tmp.txt");
ofstream file_out;
file_out.open(filename, std::ios_base::app);
file_out << "Some random text to append." << endl;
cout << "Done !" << endl;
return EXIT_SUCCESS;
}
輸出:
Done !
使用 std::fstream
和 open()
方法將文字追加到一個檔案中
另外,我們也可以使用 fstream
來實現前面的例子,它提供了一個開啟給定檔案進行讀寫/追加的選項。此方法是操作檔案流的通用方法。注意,我們還新增了驗證,如果用 is_open
呼叫的語句,可以驗證流是否與指定的檔案相關聯。
#include <iostream>
#include <fstream>
using std::cout; using std::fstream;
using std::endl; using std::string;
int main()
{
string filename("tmp.txt");
fstream file;
file.open(filename, std::ios_base::app | std::ios_base::in);
if (file.is_open())
file << "Some random text to append." << endl;
cout << "Done !" << endl;
return EXIT_SUCCESS;
}
使用 write()
方法與 std::fstream
和 open()
一起將文字新增到檔案中
解決這個問題的另一個方法是在 fstream
物件中顯式呼叫 write()
成員函式,而不是像我們在前面的例子中那樣使用 <<
操作符。這種方法對於大多數情況下應該會更快,但如果你有嚴格的效能要求,一定要對你的程式碼進行剖析並比較時間。
#include <iostream>
#include <fstream>
using std::cout; using std::fstream;
using std::endl; using std::string;
int main()
{
string text("Some huge text to be appended");
string filename("tmp.txt");
fstream file;
file.open(filename, std::ios_base::app);
if (file.is_open())
file.write(text.data(), text.size());
cout << "Done !" << endl;
return EXIT_SUCCESS;
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn