Files and Streams
Append File Stream
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
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;
}
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;count ← 1, last ← plan
pass 1 of 324while (std::getline(input(empty), lineplan)) {25 ++count→ 1;26 last→ plan = lineplan;27}All 3 passes — pass 1 is the card above pass linecountlast1 plan 0 → 1 (empty) → plan 2 build 1 → 2 plan → build 3 review 2 → 3 build → review 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
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;count ← 1, last ← plan
pass 1 of 324while (std::getline(input(empty), lineplan)) {25 ++count→ 1;26 last→ plan = lineplan;27}All 3 passes — pass 1 is the card above pass linecountlast1 plan 0 → 1 (empty) → plan 2 build 1 → 2 plan → build 3 ship 2 → 3 build → ship 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
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;count ← 1, last ← plan
pass 1 of 324while (std::getline(input(empty), lineplan)) {25 ++count→ 1;26 last→ plan = lineplan;27}All 3 passes — pass 1 is the card above pass linecountlast1 plan 0 → 1 (empty) → plan 2 build 1 → 2 plan → build 3 test 2 → 3 build → test 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