ファイルオープン

[戻る]
雨ダス 2008/07/18(金) 14:25:59
現在、ダイアログにエディットボックス2つ(m_Text1,m_Text2)とボタンを配置して、
ボタンを押下すると各々のエディットボックスに同じフォルダに保存されている2つの
テキストファイルを出力したいと考えています。
しかし、一つ目のファイル(sample1.txt)はエディットボックス(m_Text1)に表示される
のですが、二つめのファイル(sample2.txt)がエディットボックス(m_Text2)に表示でき
ません。
ブレークポイントで1行づつ見ていくと二つ目のファイルを開くところでファイルを開
けないのです。(ファイルを開けないとメッセージを出す)
下にソースを記載いたします。

色々見てみたのですが、解決策が見つかりません。ご指摘いただけると幸いです。
宜しくお願いいたします。

void CXXXDlg::OnBnClickedButton()
{
  char buf[1000];
  ifstream fin;

//テキストファイル(sample1.txt)を開く
sprintf(buf,"E:\\Test\\sample.txt");
fin.open(buf);
if(fin.fail()){
    AfxMessageBox("ファイルを開けません");
    fin.close();
}else{
// ファイルを読んでエディットコントロールへ出力
  while(fin.getline(buf,1000)){
      m_Text1 = m_Text1 + buf + "\r\n";                
   }
    fin.close();
    UpdateData(FALSE);
 }

//同じフォルダの違うファイル(sample2.txt)を開く
sprintf(buf,"E:\\Test\\sample2.txt");
fin.open(buf);
if(fin.fail()){      ←failとなりファイルを開けませんのメッセージになる
   AfxMessageBox("ファイルを開けません");
   fin.close();
  }
// ファイルを読んでエディットコントロールへ出力
  while(fin.getline(buf,1000)){
      m_Text2 = m_Text2 + buf + "\r\n";                
   }
    fin.close();
    UpdateData(FALSE);
 }

環境はVC++2005 MFCです。

たいちう 2008/07/18(金) 14:36:46
ifstreamの再利用にclose()だけじゃ駄目だったんだっけ?
問題なさそうに見えるけど。

sample1.txtに関する部分をコメントアウトすると、
sample2.txtは表示できますか?

別のインスタンス fin2 を使うとどうなりますか?

雨ダス 2008/07/18(金) 15:26:48
[[解決]]
たいちうさんレスどーもです。

>別のインスタンス fin2 を使うとどうなりますか?
たいちうさんの言われたように別のインスタンスでやってみたらうまくいきました。
ありがとうございます。

やはり同じインスタンスだと区別がつかずうまくいかないものなのですかね〜

επιστημη [HomePage] 2008/07/18(金) 20:00:33
clear()を呼んであげないからよ。

/*
 * おためし foo.cpp
 */
 
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main() {
  ifstream fin;
  fin.open("そんなのないよ");
  if ( fin.fail() ) {
    cout << "open failure\n";
  }
  fin.close();
  fin.clear(); // コレ重要!
  fin.open("foo.cpp"); // 自分自身をopen
  string line;
  while ( getline(fin,line) ) {
    cout << line << endl;
  }
  fin.close();
}

古いスレッドには追加発言できません。