テキストファイル上書き

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
April

テキストファイル上書き

#1

投稿記事 by April » 10年前

 初めて投稿します。普段は 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 を附けたり色々試みたものの、今に至って出来ません。どうしたものでしょう。
 親切な諸兄のご教示をお待ちします。

 

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 10年前

ファイルを読み込み用に開く→内容を読み込み、処理結果をバッファ(メモリ上)に保存する→ファイルを閉じる→ファイルを書き込み用に開く→バッファの内容を書き込む→バッファを閉じる
とするのがよいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

April

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

#3

投稿記事 by April » 10年前

 別名でファイルを作り、それをリネームするという方法で解決しました。調べてみると上書きって案外面倒なものなんですね。

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

閉鎖

“C言語何でも質問掲示板” へ戻る