• ベストアンサー

ファイルopenエラーになってしまう。

はじめまして。 今、open関数を使用してファイルをオープン(3秒に1回)しているのですが、一定周期でエラーになってしまいます。  周期:2時間7分 このファイルにIOをかけるのは、ここだけでcloseもちゃんとあります。openのリトライは3回(sleep(300))です。原因が全くわかりません。 どうか、宜しくお願いします。 (win2000 VC6.0)

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

CreateFile() でもなく、fopen() でもなく open() を使っているのですね? まずは、きちんとエラーの内容を調べましょう。 VC はしばらく使ってないので、良く覚えてないんですが open() はエラーになると errno に詳細情報を残すはずです。マニュアルで使い方を確認して下さい。 まあ、少ない情報で原因を想定するとしたら (1) close() しているつもりだが、実はできてない (2) 他にバグがあり、open() に渡しているファイル名の領域を破壊している というところでしょうか。 やはり、本命は (1) の方かな。7:3、いや、8:2位で。

その他の回答 (2)

  • inetd
  • ベストアンサー率23% (43/184)
回答No.3

そのファイル、または他のファイルをクローズし忘れてませんか? close() があっても特定の条件ではそこを通過しないという場合は そうなることがあります。

回答No.2

ループでまわしているのでしょうか? closeに抜けがありerrnoにEMFILEが入っているのでは? ⇒ファイルハンドルをこれ以上使えない(開いたファイルが多すぎる)。 ソースがわかるともっと詳しく回答できるのですが…。

関連するQ&A

  • fopenでのエラー

    こんばんわ、長田と申します。  現在WINNTserverのsp6で動作させるアプリを VC6作成しているのですが同一ファイルを一定周期(数秒)で オープン→ファイル処理→クローズと行っていると あるタイミングでファイルオープンエラーが発生してしまいます。  同一アプリケーションをWIN2000で動作させた場合は 発生しないのでOSに問題があるかと疑っている のですが、どなたかこのような現象に心当たりの ある方はいらっしゃらないでしょうか? ちなみに  ファイルオープンー>fopen()  ファイルクローズ->fclose() を使用しています。 宜しくお願いします。

  • openエラー

    ある大きなPerlプログラム(終わるまで何時間もかかる)の途中で小さなテキストファイルを1行だけ出力しcloseして、他のPerlプログラムからそのテキストファイルを読み込もうとするとopenエラーになってしまいます。これは、大きなPerlプログラムが終了していないからなのでしょうか。エディターでそのテキストファイルを参照すると、確かに内容は出力されているのですが…。どうすればopenエラーにならずに読み込めるのでしょうか。

  • ファイルopenについて

    1----------------------------------- open(IN,">$past_file")|| &error; @lines2=<IN>; close(IN); >は書き込みopenということですが、この使い方で一応読み込みはできます。しかしやはり使い方としては間違っているのでしょうか?OSによってはできないとか・・ というのも、ないファイルをOPENするとき、読み込みではファイルはopenできませんよね。書き込みでopenすれば、ないファイルを自動で作成してくれます。今作っている掲示板だとこれは都合がいいので、こういう風に記述したいのですがだめでしょうか。

    • ベストアンサー
    • Perl
  • ファイルオープン

    MFCのVC++6.0を使用しています。 ファイルオープンのことなんですが FILE *f; char buf[2000]; if((fopen("C:●●,"w"))==NULL)){ MessageBox("ファイルオープンエラー"); } while(fgets(buf,1000,f)!=NULL{ //処理 } fclose(f); } などで例えばリストボックスにファイルの内容を書き出したり はできます。 私の行いたいことはそのままファイルを開くということです。 例えばエクセルなどのファイル○○.XLSなどを開いたときに何かを 媒体にせずにそのまんま新ウィンドウでエクセルとしてファイルを 開くということです。どうすればいいのか調べてもわかりません。 教えて下さい。

  • ファイルのオープンについて

    いつもお世話になっています。 MFCを使ってのファイルの作成についての質問です。 ファイル名を引数としてそのファイルを作成したいのですが、ファイル名には"\","/"など使えない文字が存在します。 その文字が入ったていたら、falseを返すようにしたいのですが、どんな関数を使用すればいいのでしょうか? 今は指定された作成されたファイルをオープンするときに fileName.Open(FileName,CStdioFile::modeCreate|CStdioFile::modeWrite|CStdioFile::modeNoTruncate) のように開いてますがエラーにならず書き込みの時にエラーとなります。 作成時にエラーを出すにはどうしたらいいのでしょうか? よろしくお願いします

  • ソケットのクローズについて

    SOCKETのCLOSE直後のOPENが正しく動作しません。お力をお貸しください。 環境:WinXP 言語:C 事象:1回目はうまく動作しますが、2回目以降のOPEN処理がエラーとなってしまう。 しばらく待つ(15秒ほど)と正しくOPENされます。 CLOSEとOPENのどちらに問題があるのでしょうか? SOCKETのCLOSEに多少時間がかかるものなのでしょうか?またその時間はどれくらいなのでしょうか? 宜しくお願い致します。 ※CLOSE:closesocket関数 shutdown関数を使用

  • 【VC++2005(CLR)】ファイル書き込み時、他でファイルが開かれていると落ちる

    いつも大変お世話になっています。 VC初心者です。 現在、ファイル書き込み処理で悩んでいます。 他のユーザがファイルをオープンしてたり、開こうとすると 落ちてしまいます。 たとえば、ファイルが開かれていることを検知して、 ユーザに「ファイルを閉じてください」とメッセージを出した後、 再度書き込み処理を実行できませんでしょうか。 (書き込み中は他のユーザからのアクセスを拒否させたいです。) 現在以下のようなソースを書いています。 //ファイルオープン System::IO::StreamWriter^ sw = gcnewSystem::IO::StreamWriter( path_w,false,System::Text::Encoding::Default); //ファイル書き込み String^ newData = "aaa"; sw->WriteLine(newData); //ファイルクローズ sw->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
  • 筆まめのファイルオープンエラーについて

    筆まめVer16.08を使用しています。PCのOSはWin10 64bitです。 ソフトを起動するとファイルオープンエラーと出て作業が出来ません。対応策はおありでしょうか。 ※OKWAVEより補足:「ソースネクスト株式会社の製品・サービス」についての質問です。

  • open関数を +> で用いても。。。

    モノの本によるとファイルを開く際にファイル入出力記号を +> にすると、追加書き込みは出来ないものの、読み取り、書き込み、新規作成、上書きが出来るとのこと。 ファイルからデータを読み込んで、読み込んだ内容を加工して、すぐにファイルに保存する用途に最適だなと思いましたが、実際に使ってみると読み出しをしてくれません。 何がいけないのでしょうか。 my @s; my @t=('a','b'); open IO,'+>test.txt'; @s=<IO>; print "\$@の要素数は ".@s."個\n"; for(@t) { print IO $_."\n"; } close IO;

    • ベストアンサー
    • Perl