• ベストアンサー

ifstream/ofstream について

こんにちは。 よろしくお願いいたします。 ifstream で定義したファイルを open し、一端 close した後再度 open しようとすると、エラーとなります。 何が原因かわかりますでしょうか? ちなみに、インファイル.txt は何も記載していないので、下記ソースのwhileループ内には入りません。 が、whileループが有ればエラー(メッセージ:3103)が発生し、 無ければ、エラーは発生しません。 環境:XP home & ボーランドC++Builder6.0 テストしたソース: void __fastcall TForm1::Button6Click(TObject *Sender) { ifstream InFile; ofstream OutFile; char cBuf[255]; InFile.open("インファイル.txt"); if (!InFile) ShowMessage("3101"); OutFile.open("アウトファイル.txt"); if (!OutFile) ShowMessage("3002"); while (!InFile.getline(cBuf, sizeof(cBuf)).eof()) { OutFile << cBuf << endl; } // このwhileループが無ければ、エラーは発生しません。 OutFile.close(); InFile.close(); InFile.open("インファイル.txt"); if (!InFile) ShowMessage("3103"); // ここでメッセージが出力されます。 }

質問者が選んだベストアンサー

  • ベストアンサー
  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

ファイルを再openする前に、clearメソッドを呼んでみるといかがでしょう。

chie_tanom
質問者

お礼

こんにちは。 早速の回答、ありがとうございます。 うまくいきました。

その他の回答 (1)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

InFile.close(); InFile.clear(); InFile.open("インファイル.txt"); これでどうですか?

chie_tanom
質問者

お礼

こんにちは。 ありがとうございます。 うまくいきました。

関連するQ&A

  • ofstreamのパラメータについて

    こんにちは。 よろしくお願いいたします。 次の様なソースで、ofstreamで定義した「OutFile」をオープンし、 オープン出来たかどうかを、次のif文で見ています。 ofstreamで定義した「OutFile」は色々なパラメータを含んでいますが、このif文で見ているのは、「OutFile」のどこのパラメータでしょうか? ofstream OutFile; AnsiString asBuff; asBuff = "C:\\aaa.tmp"; OutFile.open( asBuff.c_str() ); if( !OutFile ){ ShowMessage("エラー"); }

  • ofstream について

    こんにちは。 よろしくお願いいたします。 次はソースの一部です。 ofstreamで定義した「OutFile」をオープンすると、aaa.tmp は作成されるのですが、オープンできずエラーメッセージを出力します。 何がおかしいのでしょうか? どこが間違っているのでしょうか? ofstream OutFile; AnsiString asBuff; asBuff = "C:\\aaa.tmp"; OutFile.open( asBuff.c_str() ); if( !OutFile ){ ShowMessage("エラー"); }

  • ifstreamについて

    ifstream でファイルを読み込もうとしているのですが、上手くいきません。 ソース A.cpp #include"A.h" void Broker::read_file(ifstream in) { in >> shikin; } int main(void) { ifstream in; in.open("hoge.txt"); Broker b; b.read_file(in); b.show(); } A.h #include<fstream.h> #include<iostream.h> class Broker{ int shikin; int nensu; double nenri; int tesuryo; public: Broker() { shikin = 0; nensu = 0; nenri = 0.0; tesuryo = 0; } void read_file(ifstream in); void show() {cout << shikin << endl;} }; 以上のようなプログラムなのですが、 コンパイルすると エラー E2247 'ios::basic_ios(const ios &)' はアクセスできない(関数 ifstream::basic_ifstream(ifstream &) ) エラー E2125  コンパイラは 'copy constructor' クラスの istream を作成できない(関数 ifstream::basic_ifstream(ifstream &) ) とのエラーが出てきて実行できません。 コンパイラ C++Builder OS XP なにが原因なのかが分かりません。 本当に初心者な質問ですが、よろしくお願いします。 (何か足りない情報などがありましたら、お手数ですがその掲示板にお願いします)

  • 意味のよく分らないソース

    http://oshiete1.goo.ne.jp/qa2846277.html 上のURLのソースについていくつか質問です。 while(!feof(stdin)) { scanf("%c", &ch); if(!feof(stdin)) printf("%c", ch); } と、書いてありますが、「!feof(stdin)」のようにいきなりエクスクラメーションマー ク(ビックリマーク)が付いていますが、これはどの様な意味になるのでしょうか? また、whileでstdinを回しているようですが、stdinはどのタイミングにどの様に入力し ているのでしょうか? ANo.4の方がcp.exeというファイル名でこのプログラムをコンパイルしたら、「cp < infile.txt > outfile.txt」と入力すると、infile.txtの内容をoutfile.txtへコピーで きると書いてあるのですが「<■■■■■>」のように「<」と「>」のマークでくくって いるのはどういう意味になるのでしょうか?

  • [perl5.8] SJISで出力したはずのファイルにutf8フラグが

    1)SJISで以下の2行を含むファイルを作成し、   sjis.txtという名前で保存します。 "ホツカイドウ" "北海道" 2)SJISで以下のスクリプトを作成します。 #=== one.pl === use encoding 'Shift_JIS'; use open IN => ":encoding(Shift_JIS)"; use open OUT => ":encoding(Shift_JIS)"; my $infile = 'sjis.txt'; my $outfile = 'sjis2.txt'; open(IN, "<$infile"); @lines = <IN>; close(IN); open(OU, ">$outfile"); print OU @lines; close(OU); 3)SJIJSで以下のスクリプトを作成します #=== two.pl === use encoding 'Shift_JIS'; use open IN => ":encoding(Shift_JIS)"; use open OUT => ":encoding(Shift_JIS)"; my $infile = 'sjis2.txt'; my $outfile = 'sjis3.txt'; open(IN, "<$infile"); @lines = <IN>; close(IN); open(OU, ">$outfile"); print @lines; close(OU); 4)one.pl を実行し、続いてtwo.plを実行すると 以下のエラーがコマンドプロンプトに表示されます。 #------------------------------------------- D:\zipcode\utf8mondai>two.pl Wide character in print at D:\zipcode\utf8mondai\two.pl line 14. "・趣セゑスカ・イ・・セ橸スウ" Wide character in print at D:\zipcode\utf8mondai\two.pl line 14. "蛹玲オキ驕・ これは何故なのでしょうか。 エラーメッセージは、printしようとしている 文字列にutf8フラグがついているという意味 らしいです。

    • ベストアンサー
    • Perl
  • 改行を含んだ文字列を正規表現で置換するには?

    正規表現で、改行を含んだ文字列を置換しようと思っています。 例えば下の「infile.txt」にある aaa bbb という(2行にわたる)文字列を zzz という文字列に変換させたい訳です。 試しに「test.vbs」のようなコードを書いてみましたが、これでは上手く行きませんでした。 上手く変換されるようにするには、どうしたら良いでしょうか? ----------------------------------------------------- ○「test.vbs」の内容 Set fso = CreateObject("Scripting.FileSystemObject") Set inFile = fso.OpenTextFile("C:\infile.txt") Set outFile = fso.CreateTextFile("C:\outfile.txt") Set regEx = New RegExp regEx.pattern = "aaa\nbbb" repStr = "zzz" Do Until inFile.AtEndOfStream tempLine = inFile.ReadLine repLine = regEx.Replace(tempLine, repStr) outFile.WriteLine repLine Loop inFile.Close outFile.Close ----------------------------------------------------- ○「C:\infile.txt」の内容 aaa bbb ccc

  • BorlandC++Builder5.0でリンカエラー

    現在A/D変換ボードの制御をしようとしています。 ボードのインストールも行なったのですが、以下のエラーが出て困っています。 外部シンボル 'AdOpen' が未解決(C:\PROGRAM FILES\BORLAND\CBUILDER5\PROJECTS\MAG\MAIN.OBJ が参照)と出てしまいます。 mainはシンプルなのですが... void __fastcall TForm1::OpenDevClick(TObject*Sender) { device_handle = AdOpen("FBIAD1"); if(device_handle == INVALID_HANDLE_VALUE){ ShowMessage("Err : デバイスのオープンに失敗"); return; } } そもそもこのエラーはなぜ出るのですか?

  • ファイル入出力で

    現在ファイル入出力の項目をしているのですが、以下の内容で実行すると エラーが出てどうしても実行できません。主にどこを直せばいいのでしょうか? /* ファイルをコピーするプログラム */ #include <stdio.h> int main(void) { FILE *fin, *fout; char infile[40], outfile[40]; char str[256]; printf("コピー元ファイル = "); scanf("%39s", infile); printf("コピー先ファイル = "); scanf("%39s", outfile); if( (fin = fopen(infile, "r") ) == NULL) { printf("Input file open error.\n"); return 1; } if( (fout = fopen(outfile, "w") ) == NULL) { printf("Output file open error.\n"); fclose(fin); return 1; } while(fgets(str, sizeof(str), fin) != NULL) { fputs(str, fout); } fclose(fin); fclose(fout); return 0; } エラーは FILE 、fin, fout,NULLの未定義です。 よろしくお願いします。

  • ファイルの変換で文字化けを回避したい

    ファイル中の文字列を一部書き換える処理をしています。regEx.replaceを使って書き換えたところ、日本語が下記のように文字化けしてしまいます。 これを回避するためにどうしたら良いでしょうか? ○変換前:test1.txt <description>東京都</description> ○変換結果:test2.txt(文字化け) <description>譚ア莠ャ驛ス</description> ○スクリプト Set fso = CreateObject("Scripting.FileSystemObject") Set inFile = fso.OpenTextFile("c:\test1.txt") Set outFile = fso.CreateTextFile("c:\test2.txt") Set regEx = New RegExp regEx.pattern = "テスト" repStr = "てすと" Do Until inFile.AtEndOfStream tempLine = inFile.ReadLine repLine = regEx.Replace(tempLine, repStr) outFile.WriteLine repLine Loop inFile.Close outFile.Close

  • エラーになってしまいます。

    先日、ファイルの一行だけを読込める?と質問した者です。早速教えて頂いた方法でやってみました。 open(IN,"A.txt"); while ($xx = <IN>) {   if ($. == 5) {     print $xx;   } } close(IN); とやりました。 サーバーエラーになるのでまず open(IN, "A.txt"); while ($xx = <IN>) { print $xx; } close(IN); とファイルの読み込みでやってみたのですがそれでもサーバーエラーになってしまいました。 エラーの原因がどこにあるのか、わからなく困っています。考えられるような原因は何でしょうか? ちなみにcgiのパーミッションは755です。 あとtxtファイルをどこに置けばいいのか、よくわからないいのですがそれが原因なのでしょうか?

    • ベストアンサー
    • CGI

専門家に質問してみよう