Opening a file with std::ios::app adds new output to the end instead of replacing the file.

append mode Append mode preserves existing file contents and writes new data after them.

Append File Stream

extraLine
append_file_stream.cpp
Replay: real traced execution (multi-file project)
#include <cstdio>
#include <fstream>
#include <iostream>
#include <string>

int main() {
    std::string extraLine = "review";
    std::string filename = "append_log.txt";

    std::ofstream start(filename);
    start << "plan" << std::endl;
    start << "build" << std::endl;
    start.close();

    std::ofstream append(filename, std::ios::app);
    append << extraLine << std::endl;
    append.close();

    std::ifstream input(filename);
    std::string line;
    std::string last;
    int count = 0;

    while (std::getline(input, line)) {
        ++count;
        last = line;
    }

    std::cout << "lines=" << count << std::endl;
    std::cout << "last=" << last << std::endl;
    std::remove(filename.c_str());
    return 0;
}
#include <cstdio>
#include <fstream>
#include <iostream>
#include <string>

int main() {
    std::string extraLine = "ship";
    std::string filename = "append_log.txt";

    std::ofstream start(filename);
    start << "plan" << std::endl;
    start << "build" << std::endl;
    start.close();

    std::ofstream append(filename, std::ios::app);
    append << extraLine << std::endl;
    append.close();

    std::ifstream input(filename);
    std::string line;
    std::string last;
    int count = 0;

    while (std::getline(input, line)) {
        ++count;
        last = line;
    }

    std::cout << "lines=" << count << std::endl;
    std::cout << "last=" << last << std::endl;
    std::remove(filename.c_str());
    return 0;
}
#include <cstdio>
#include <fstream>
#include <iostream>
#include <string>

int main() {
    std::string extraLine = "test";
    std::string filename = "append_log.txt";

    std::ofstream start(filename);
    start << "plan" << std::endl;
    start << "build" << std::endl;
    start.close();

    std::ofstream append(filename, std::ios::app);
    append << extraLine << std::endl;
    append.close();

    std::ifstream input(filename);
    std::string line;
    std::string last;
    int count = 0;

    while (std::getline(input, line)) {
        ++count;
        last = line;
    }

    std::cout << "lines=" << count << std::endl;
    std::cout << "last=" << last << std::endl;
    std::remove(filename.c_str());
    return 0;
}
  1. extraLine ← review, filename ← append_log.txt, start ← (empty)

    6int main() {7    std::string extraLine→ review = "review"; //@extraLine="ship", "test"8    std::string filename→ append_log.txt = "append_log.txt";910    std::ofstream start→ (empty)(filenameappend_log.txt);11    start(empty) << "plan" << std::endl;12    start(empty) << "build" << std::endl;13    start(empty).close();1415    std::ofstream append→ (empty)(filenameappend_log.txt, std::ios::app);16    append(empty) << extraLinereview << std::endl;17    append(empty).close();1819    std::ifstream input→ (empty)(filenameappend_log.txt);20    std::string line→ (empty);21    std::string last→ (empty);22    int count→ 0 = 0;
  2. count ← 1, last ← plan

    pass 1 of 3
    24while (std::getline(input(empty), lineplan)) {25    ++count→ 1;26    last→ plan = lineplan;27}
    All 3 passes — pass 1 is the card above
    passlinecountlast
    1plan0 1(empty) plan
    2build1 2plan build
    3review2 3build review
  3. std::cout << "lines=" << count << std::endl;

    29    std::cout << "lines=" << count3 << std::endl;30    std::cout << "last=" << lastreview << std::endl;31    std::remove(filenameappend_log.txt.c_str());32    return 0;33}
    outputlines=3
    last=review
  1. extraLine ← ship, filename ← append_log.txt, start ← (empty), append ← (empty)

    6int main() {7    std::string extraLine→ ship = "ship";8    std::string filename→ append_log.txt = "append_log.txt";910    std::ofstream start→ (empty)(filenameappend_log.txt);11    start(empty) << "plan" << std::endl;12    start(empty) << "build" << std::endl;13    start(empty).close();1415    std::ofstream append→ (empty)(filenameappend_log.txt, std::ios::app);16    append(empty) << extraLineship << std::endl;17    append(empty).close();1819    std::ifstream input→ (empty)(filenameappend_log.txt);20    std::string line→ (empty);21    std::string last→ (empty);22    int count→ 0 = 0;
  2. count ← 1, last ← plan

    pass 1 of 3
    24while (std::getline(input(empty), lineplan)) {25    ++count→ 1;26    last→ plan = lineplan;27}
    All 3 passes — pass 1 is the card above
    passlinecountlast
    1plan0 1(empty) plan
    2build1 2plan build
    3ship2 3build ship
  3. std::cout << "lines=" << count << std::endl;

    29    std::cout << "lines=" << count3 << std::endl;30    std::cout << "last=" << lastship << std::endl;31    std::remove(filenameappend_log.txt.c_str());32    return 0;33}
    outputlines=3
    last=ship
  1. extraLine ← test, filename ← append_log.txt, start ← (empty), append ← (empty)

    6int main() {7    std::string extraLine→ test = "test";8    std::string filename→ append_log.txt = "append_log.txt";910    std::ofstream start→ (empty)(filenameappend_log.txt);11    start(empty) << "plan" << std::endl;12    start(empty) << "build" << std::endl;13    start(empty).close();1415    std::ofstream append→ (empty)(filenameappend_log.txt, std::ios::app);16    append(empty) << extraLinetest << std::endl;17    append(empty).close();1819    std::ifstream input→ (empty)(filenameappend_log.txt);20    std::string line→ (empty);21    std::string last→ (empty);22    int count→ 0 = 0;
  2. count ← 1, last ← plan

    pass 1 of 3
    24while (std::getline(input(empty), lineplan)) {25    ++count→ 1;26    last→ plan = lineplan;27}
    All 3 passes — pass 1 is the card above
    passlinecountlast
    1plan0 1(empty) plan
    2build1 2plan build
    3test2 3build test
  3. std::cout << "lines=" << count << std::endl;

    29    std::cout << "lines=" << count3 << std::endl;30    std::cout << "last=" << lasttest << std::endl;31    std::remove(filenameappend_log.txt.c_str());32    return 0;33}
    outputlines=3
    last=test