例えば「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クラスの関数を使わずにいきたいのですが
これらをうまく出来る為にはどうすればいいのでしょうか?教えてください。
まず、環境を書いてください。
OS、使っている VC++ のバージョン、MFC の有無。
見る限り MFC は使っているようですが。
> うまく表示させません。
「されない」んじゃなくて「させない」んですか(笑
いや、冗談は置いといて…
現状、どのようにうまく行ってないのかも書くべきですね。
> CString型の変数やCStringクラスの関数を使わずに
現在でも使っていないように思われますが?
>現状、どのようにうまく行ってないのかも書くべきですね。
説明不足すいません、実行しても何も表示されないんですよ。
試しにwhileの部分を外して実行してみたら、始めの1行は表示されました。
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は使っていない。
返信の方ありがとうございました
おかげで表示させることができました。
どうもありがとうございました。
ツイート | ![]() |