如何在 C++ 中將文字追加到檔案

Jinku Hu 2023年1月30日 2020年10月15日
  1. 使用 std::ofstreamopen() 方法將文字追加到檔案中
  2. 使用 std::fstreamopen() 方法將文字追加到一個檔案中
  3. 使用 write() 方法與 std::fstreamopen() 一起將文字新增到檔案中
如何在 C++ 中將文字追加到檔案

本文介紹了多種在 C++ 中將文字追加到檔案中的方法。

使用 std::ofstreamopen() 方法將文字追加到檔案中

首先,我們應該建立一個 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::fstreamopen() 方法將文字追加到一個檔案中

另外,我們也可以使用 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::fstreamopen() 一起將文字新增到檔案中

解決這個問題的另一個方法是在 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;
}
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

相關文章 - C++ File