テキストファイルの内容をエディットボックスに表示させるには?

解決


pakuman  2004-05-16 18:05:25  No: 53685

例えば「a.txt」というファイルがあるとします
そのファイルの内容をエディットボックスに同じように表示させるには
どうしたらいいのでしょうか?
現在はfstreamを使って
表示させたいエディットボックスがm_editとして
std::fstream fin( "a.txt", std::ios::in );
if( fin.fail())
    return false;
char buf[30];
while( !fin.eof() )
{
    fin >> buf;
    m_edit.SetWindowText(buf)
}
という感じで行おうとしてるのですがうまく表示させません。
それとCString型の変数やCStringクラスの関数を使わずにいきたいのですが
これらをうまく出来る為にはどうすればいいのでしょうか?教えてください。


シャノン  2004-05-16 21:47:43  No: 53686

まず、環境を書いてください。
OS、使っている VC++ のバージョン、MFC の有無。
見る限り MFC は使っているようですが。

> うまく表示させません。
「されない」んじゃなくて「させない」んですか(笑
いや、冗談は置いといて…
現状、どのようにうまく行ってないのかも書くべきですね。

> CString型の変数やCStringクラスの関数を使わずに
現在でも使っていないように思われますが?


pakuman  2004-05-16 23:00:05  No: 53687

>現状、どのようにうまく行ってないのかも書くべきですね。
説明不足すいません、実行しても何も表示されないんですよ。
試しにwhileの部分を外して実行してみたら、始めの1行は表示されました。


YuO  2004-05-16 23:44:09  No: 53688

eofbitは読み込み動作を実行したタイミングでセットされます。

なので,
> while( !fin.eof() )
> {
>     fin >> buf;
は,
while (fin >> buf)
とするのがよいでしょう。

そして,表示されないように見えるのは,>>演算子で読み込むたびに,
SetWindowTextによって表示内容を上書きしているからです。
全てをため込んでおくか,CEdit::SetSel + CEdit::ReplaceSelで追記していくのが常套手段です。
http://msdn.microsoft.com/library/en-us/vclib/html/_mfc_cedit.3a3a.setsel.asp
http://msdn.microsoft.com/library/en-us/vclib/html/_mfc_cedit.3a3a.replacesel.asp

思いつきでは,
std::ifstream fin ("a.txt", std::ios_base::binary );
if (!fin) return;
std::stringstream ss(fin.rdbuf());

m_edit.SetWindowText(ss.str().c_str());
あたりでいけそうな気もしますが……。
#確証無し。一応CStringは使っていない。


pakuman  2004-05-18 06:50:19  No: 53689

返信の方ありがとうございました
おかげで表示させることができました。

どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加