2012-01-19 5 views
4

私はDLLに順番にアクセスするプログラムを持っています。さまざまな方法でファイルを使用し、ファイルを作成し、コピーしてemailMessageオブジェクトの添付ファイルとして確立します。私は、ファイルの上書きを防ぐ、 '使用中のファイル'エラーがあります。C#でファイルハンドルの問題をデバッグ/

処理を緩和するためのツールやテクニックがありますか?特定の文字列を含むハンドルの作成/削除など、何らかの警告がありますか?私はプロセスエクスプローラ、プロセスモニタ(filemonの後継者)などを見てきましたが、運はありません。

私は狩猟を続けることができますが、コードを通じて私の非公式の調査を続けるよりも良いアプローチがあると考えました。コメントの

EDIT

感謝。質問に関して、構造はちょっと複雑です。私は 'Engine' dll(C#でも)を参照する私の 'クライアント'アプリケーションを持っています。どちらも自分のものです。クライアントは、それぞれがさまざまなファイルへのファイル参照を含む「添付ファイル」のインスタンスを作成します。そのコンストラクタが参照するファイルを取得し、コピーを一時フォルダに格納します。後で、一連のアクションが電子メールを作成します。各添付ファイルをEmailMessageオブジェクトの「実際の」添付ファイルとして追加します。いろいろな時に私はオブジェクトを処分し、その参照をnullに設定しますが、それを早く行うと、null参照例外が発生します。あまりにも遅くすると、悪いことが起こっている!私はこの特定のバグを間に合わせることができると確信していますが、知っている人が使っている便利な標準的な方法があるかどうか疑問に思うようになりました。 :)

+0

私の最初の考えはプロセスエクスプローラを推奨することでしたが、私はあなたがすでにそれを試してきたのを見ています。いいえ、ええ? –

+0

ファイルへのハンドルの作成(Filestreamなど)がアプリケーション内に完全に作成されているか、外部プロセスも関係していますか? –

+1

ファイルが使用中エラーです。ファイルを呼び出す/作成するコードにアクセスできますか?もしそうなら、それはおそらく適切にリリースされていないかもしれませんし、C#コードの場合、ファイルストリームの新規作成がこれを引き起こす可能性があります。ファイル/添付ファイルを作成するコードのサンプルがありますか?未管理のコード.. ?? – MethodMan

答えて

2

デバッグ中にファイルをロックしていることを知らせるツールを探しているようです。その場合は、Unlockerを使用してファイルをロックするプロセスを判断できます。

3

Procmonはファイルを開いている人物(プロセス)とそのファイルを開いた場所の(管理されていない)スタックを教えてくれます。

C#/ .NETでこの問題が発生する通常の原因は、ファイルストリームを開いていて、ファイルストリームを終了した時点で処理しないという人です。これは、(少なくとも)次のガベージコレクションまでオープンされたままであることを意味します。

+2

IDisposableとブロックロックを使用しています。 – kenny

+0

ありがとうございます。同意する;それらのオブジェクトを電子メールに添付するのに十分長い間オブジェクトの一部を保持する必要があります(上記の私の編集を参照) – Glinkot

関連する問題