read and write file is a very common operation regarding file mainuplation.
However, the powerfull getline only can read line by line(with new line character ' ' as delimiter).
Inorder to write the line back into file, we often have to add ' ' at the last of each line.
However, in this way we can add extra ' ' character compared to the original file.
To avoid this inaccuracy, may be not a big deal in a common situation, but I have tested that an extra ' ' at *.tgz file can infere the untar of it.
I suggest the following way to read and write file in exact way, without adding any extra character.
The key idea:
Since we should not add ' ' at the last line of reading file, we can avoid this by defering the time of add ' ' by using pre_line and buffer_line.
only this is a new line available(buffer_line), we append the ' ' character to the pre_line. Otherwise, it is the lat line, we should write it directly into the outstream without appeding the ' ' character.
coding sample:
ofstream out;
out.open(obj_path.c_str());
string pre_line;
string buffer_line;
getline(cin, pre_line);
while (1) {
if (getline(cin, buffer_line)) {
pre_line += ' '; /*pre_line + ' ' if its next line is not the last line*/
out << pre_line;
pre_line = buffer_line;
} else{
out << pre_line;/*the pre_line is the last new, no need to add ' '*/
break;
}
}
out.close();