ファイルオープン – プログラミング – Home

通知
すべてクリア

[解決済] ファイルオープン


雨ダス
 雨ダス
(@雨ダス)
ゲスト
結合: 16年前
投稿: 2
Topic starter  

現在、ダイアログにエディットボックス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です。


引用未解決
トピックタグ
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

ifstreamの再利用にclose()だけじゃ駄目だったんだっけ?
問題なさそうに見えるけど。

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

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


返信引用
雨ダス
 雨ダス
(@雨ダス)
ゲスト
結合: 16年前
投稿: 2
Topic starter  

たいちうさんレスどーもです。

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

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


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

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();
}


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました