ページ 11

テキストファイル上書き

Posted: 2015年7月26日(日) 10:22
by April
 初めて投稿します。普段は Delphi を使っていて、C/C++ の知識が無いとネット上の記事を読むのに不便だと考え、C++ を習い始めた日曜プログラマです。今朝から、相当に初等的な所で躓いています。

 数十行のテキストファイルがあります。中に現れる Boy という文字を Girl に置き換えた後、ファイルを上書き保存するというようなことがしたいのですが、出来ません。main() から読んだサブルーチン Shuusei で字句の修正をします。

コード:

void shuusei(char *fName) 
{
	ifstream ifs(fName);
	ofstream ofs(fName);
	string s;
	while(getline(ifs,s))
	{
		// この部分は、もし Boy があれば s.replace で Girl に置き換える、というコード
		ofs << s << endl;
	}	
	return;
}
 これが上手く行かず、元のファイルが真っ白(0 byte)に上書きされてしまいます。ofs の出力ファイル名を fName 以外にすれば修正されたファイルがその名で正しく作成されるのですが、fName では駄目です。分らぬながら ios::trunc を附けたり色々試みたものの、今に至って出来ません。どうしたものでしょう。
 親切な諸兄のご教示をお待ちします。

 

Re: テキストファイル上書き

Posted: 2015年7月26日(日) 10:31
by みけCAT
ファイルを読み込み用に開く→内容を読み込み、処理結果をバッファ(メモリ上)に保存する→ファイルを閉じる→ファイルを書き込み用に開く→バッファの内容を書き込む→バッファを閉じる
とするのがよいでしょう。

Re: テキストファイル上書き

Posted: 2015年7月26日(日) 15:26
by April
 別名でファイルを作り、それをリネームするという方法で解決しました。調べてみると上書きって案外面倒なものなんですね。

 みけCAT さん、回答有難うございました。