\n
各追加文字がファイルに追加された後にのみ追加できる内部ファイルがあります。ただし、理論的には、ファイルへの追加に失敗して破損する可能性があります。そのため、ファイルを開くたびに、最後の EOL の後、最後に有効な位置までシークしたいのです。このコードはそれを行います:
// Not using ios::app instead of ios::ate | ios::out because it will
// put print pointer to the EOF every time before writing.
fstream file(name.c_str(), ios::binary | ios::ate | ios::out | ios::in);
if(!file.is_open()) {
cerr << "Error in oppening file " << name << endl;
exit(EXIT_FAILURE);
} else {
while(0 != file.tellp()) //if file is not empty
{
file.seekg(-1, ios_base::cur);
if(0 == file.tellg() || file.get() == '\n') {
break;
}
file.seekg(-1, ios_base::cur);
}
file.seekp(of.tellg());
}
//{1}
//Use file for appending to...
ただし、ファイルに追加する必要がある部分の長さが、ファイル内の最後の EOL 文字から始まる部分の長さよりも短い場合、うまく機能しません。そのため、{1}
ファイルの内容を file.tellp() から最後まで削除する必要があります。
どうやってやるの?