none
ファイルI/Oがはじかれてしまう… RRS feed

  • 質問

  • お疲れ様です。

    初心者ですが、よろしくお願いします。

    Visual Studio 2005 のVBでプログラムを作っています。

    サードパーティの帳票ツールを使って画面にプレビューをしていたら、画面表示が壊れてしまいました。

    帳票ツールの会社に調べてもらったら、帳票ツールが書き出したファイルから情報を読もうとしたところで

    はじかれてしまったとか…。プログラム自体がファイルへのI/Oをはじかれているのではないか…との事でした。

    試しに帳票ツールの替わりにStreamWriterでファイルにログを書くようにして、flush してからcloseするようにしたら、

    flushしたところで「システムエラー(ハンドルが無効です)」が発生しました。(例外:System.IO.IOException)

    (決してflush前にcloseしている訳ではありません)

    帳票ツールの会社の人が言ってたI/Oがはじかれる、と言うのがこれなのかと思います。

    ただこのエラーも必ず起きる訳ではなくて、2~3回続いたかと思うと2~3日出なかったりします。

    その時は正しくcloseしたファイルには正しくログの内容が書かれています。

    ちなみに上のエラーが出た時はファイルの中は空っぽです。

    ググッてみても、よくわかりません。

    誰か助けて下さい。

    2012年5月30日 14:15

回答

  • 正直、難しいですね。
    利用されているストレージ(ハードディスクドライブ)の障害の可能性であるとか、常駐させているソフトウェアの相性(ウィルス対策ソフトなど)であるとか、かんたんには想定できない問題が発生しているのかもしれません。
    エラーが発生したときにイベントログが残っていないか、何らかのソフトウェアを動かしていないかというところからでしょうか。

    // 一般論では難しい気がします。
    // 何か特殊な環境になっていないかを探す、雲をつかむような作業になるかもしれない。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。

    • 回答の候補に設定 山本春海 2012年6月25日 8:13
    • 回答としてマーク 山本春海 2012年7月3日 8:23
    2012年5月30日 15:22
    モデレータ
  • デバッグしましょう。そして原因を探りましょう。

    Flushでエラーになるとして、それ以前のタイミングでStreamWriterへの書き込みはできていますか? ちゃんと意図したファイル名でオープンできていますか? ファイルサイズが0になるタイミングはいつか、オープンした時ですか? もっとほかのタイミングで0に減ったりしていませんか?

    気になる点があれば、ご自身で調べるしかありません。

    • 回答の候補に設定 山本春海 2012年6月25日 8:13
    • 回答としてマーク 山本春海 2012年7月3日 8:23
    2012年6月4日 6:56
  •  その例外は、特定の PC では発生しやすいのでしょうか。また、例外が発生した時間は特定できますか?あるいは、発生する場所がわかっているなら、catch ブロックで発生時間をログするようにできるでしょうか。

     時間が特定できたら、システムのイベントに、同じ時間に何かログが残っていないか、確認してみてください。その他、可能なら、パフォーマンス モニターなどで I/O 頻度をログして、例外になるときと I/O 頻度が関係しているか調べる、というようなことも考えられます。


    Jitta@わんくま同盟

    • 回答の候補に設定 山本春海 2012年6月25日 8:13
    • 回答としてマーク 山本春海 2012年7月3日 8:23
    2012年6月4日 12:23

すべての返信

  • 正直、難しいですね。
    利用されているストレージ(ハードディスクドライブ)の障害の可能性であるとか、常駐させているソフトウェアの相性(ウィルス対策ソフトなど)であるとか、かんたんには想定できない問題が発生しているのかもしれません。
    エラーが発生したときにイベントログが残っていないか、何らかのソフトウェアを動かしていないかというところからでしょうか。

    // 一般論では難しい気がします。
    // 何か特殊な環境になっていないかを探す、雲をつかむような作業になるかもしれない。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。

    • 回答の候補に設定 山本春海 2012年6月25日 8:13
    • 回答としてマーク 山本春海 2012年7月3日 8:23
    2012年5月30日 15:22
    モデレータ
  • Azuleanさん、ありがとうございます。

    試しに他のPC上でも動かしてみたら、なかなかエラーにならなかったんですが、根気よく続けたらエラーが出ました。

    (ハードディスクのせいではないようです。)

    あと、ウィルス対策ソフト(Windows Essentials)は、「スケジュールされたスキャン」と「リアルタイム保護」のチェックをOff にしてみましたが、同じ

    エラーが出ました。(アンインストールした方がよかったんでしょうか?)

    ただ、他のプログラム(エクセルやワード、または秀丸エディタやメモ帳など)では発生していない事から、現在エラーが発生しているプログラムの内部に

    原因があるのかなと思っています。(あっ、偉そうな事言ってすみません)

    「特殊な環境になっている」って事は件のプログラムが特殊な環境にしちゃってる…って事ですよね。

    他のプログラムを参考に手探りで作ったプログラムなので、知らないうちに特殊工作員を仕込んでしまったのかも…(汗

    原因を探す手段だけでも、知ってる人とか居ましたら、是非連絡下さい。

    2012年6月4日 6:35
  • デバッグしましょう。そして原因を探りましょう。

    Flushでエラーになるとして、それ以前のタイミングでStreamWriterへの書き込みはできていますか? ちゃんと意図したファイル名でオープンできていますか? ファイルサイズが0になるタイミングはいつか、オープンした時ですか? もっとほかのタイミングで0に減ったりしていませんか?

    気になる点があれば、ご自身で調べるしかありません。

    • 回答の候補に設定 山本春海 2012年6月25日 8:13
    • 回答としてマーク 山本春海 2012年7月3日 8:23
    2012年6月4日 6:56
  • 佐祐理さん、ありがとうございます。

    Visual Studio からデバッグ開始で実行してみても、なかなかエラーが出てくれないんです。

    デバッグで実行して、ステップ オーバー で進めた場合の動きですが、うまくいく時は

    StreamWriter のopenでもwriteLineでもflushでもエラーは出ません。ファイルも意図した名称です。

    StreamWriter を使用した時は、大した量のデータを書き込んでいないせいか、flushするまでファイルサイズは0です。

    エラーが出ない時はこのflushでファイルサイズが1になりました。エラーが出る時は0のままです。

    帳票ツールがファイルに出力するデータは結構な量のようで、この時はファイルサイズは1以上でした。

    要するにflushでエラーになる時とうまく書けちゃう時とで、デバッグ実行でステップ オーバー する上で違いがわからないんです。

    そもそもwriteLineで書いたハズの内容がきちんと書かれているか確認したくてflushを呼ぶようにしたんですよ。

    ダラダラと書いてしまいましたが、デバッグするにもどこをどんな風に調べればいいのかが見えなくて困って得います。

    よろしくお願いします。

    2012年6月4日 10:54
  •  その例外は、特定の PC では発生しやすいのでしょうか。また、例外が発生した時間は特定できますか?あるいは、発生する場所がわかっているなら、catch ブロックで発生時間をログするようにできるでしょうか。

     時間が特定できたら、システムのイベントに、同じ時間に何かログが残っていないか、確認してみてください。その他、可能なら、パフォーマンス モニターなどで I/O 頻度をログして、例外になるときと I/O 頻度が関係しているか調べる、というようなことも考えられます。


    Jitta@わんくま同盟

    • 回答の候補に設定 山本春海 2012年6月25日 8:13
    • 回答としてマーク 山本春海 2012年7月3日 8:23
    2012年6月4日 12:23
  • Jittaさん、ありがとうございます。

    今のところ4台のPCで試してみましたが、4台共に発生しました。発生しやすさは特に偏りはないと思います。

    発生時刻も決まっていないみたいです。

    システムイベントログ、パフォーマンスモニター は明日以降に挑戦してみようと思います。

    2012年6月4日 14:04
  • こんにちは、見習い天使 さん。

    MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。
    その後いかがでしょうか。
    問題の切り分けに参考になるアドバイスをいただいているかと思いましたので、勝手ながら私の方で一旦回答としてマークさせていただきました。
    アドバイスくださったみなさん、ありがとうございます。

    いただいた情報の中で、解決に役立った投稿や、参考になる情報など有効な情報には回答としてマークすることをお願いしています。
    今後、同じ問題でこのスレッドを参照される方にも、有効な情報を活用いただけるかと思いますので、ご協力よろしくお願いいたします。

    今後とも MSDN フォーラムをよろしくお願いいたします。それでは。
    _____________________
    日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海

    2012年7月3日 8:23