私はいくつかの内部ファイルを追加することができます。追加するファイルは、ファイルに追加するたびに\n
という文字が追加された後です。しかし理論的には、ファイルへの追加が失敗し、ファイルが破損する可能性があります。そのため、ファイルを開くたびに、最後の有効な、最後のEOLの後の位置に移動します。このコードは、それを行うだろう:最後の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()から始まるファイル内容を最後まで削除したい。
どうすればいいですか?
'ftruncate'はUnixのみです。また、引数としてストリームまたは 'FILE * 'を取りません。 –
これは理想的ではありません(私が言ったように、私はC++のことを知らない)。私はそれがPOSIXのコマンドであることを認識しませんでした。 Windowsでは、同じことを達成するために '_chsize_s'を使う必要があるようです。 –
Windowsでは、対応する関数は 'SetEndOfFile'になります。どちらもシステムハンドルが必要です( 'filebuf'や' FILE * 'ではなく、C++でもCでもない)。 –