2012-05-05 3 views
0

私はビジュアルスタジオ2010でwinformアプリケーションを作成しました。ユーザーはローカルシステムをブラウズしてイメージを選択できるので、アプリケーションはそのイメージをコピーします(File.Copy()メソッドを使用)をそのフォルダに追加します。それは別のプロセスで使用されているためFile.Delete()メソッドを使用してファイルを削除する際にエラーが発生しました

このファイルを削除することはできません。ユーザーはその画像(File.Delete()メソッド)を削除したい場合 問題がある、私はこのようなエラーが受け取ります。

他のプロセスで画像ファイルを使用していないため、このエラーの内容をわかりません。

+0

使用しているコードを投稿してください。 – 3aw5TZetdf

+0

[プロセスエクスプローラ](http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)を使用して、ハンドルを持つプロセスを見つけることができます。私の推測では、どこかで.Close()を忘れてしまったのですが、これで確認できます。 –

+1

ダウンロードプロセスモニタ:ファイルを使用しているプロセスを正確に表示できます:http://technet.microsoft.com/en-us/sysinternals/bb896645あなた自身のwinformアプリケーションで不注意にあなたを開いたことを賭けています;) – paulsm4

答えて

-1

プロセスエクスプローラは信頼できないかもしれないエッジケースがありますが、代わりにあなたは何が起こっているUnlocker

+0

Unlockerを推奨することは、最悪のアドバイスです:http://stackoverflow.com/a/2611885/17034 –

0

を試すことができ、我々はC#コードからファイルをコピーするときということであっても、それを貼り付け、コンラッドが提案何に同意しますそのプログラムが元の/コピーされたファイルへのリンク/情報を保持した後。これは、プログラムによってコピーされていないファイルや、フォルダ内にすでに存在するファイルには適用されません。

この代わりに、copy shell/dosコマンドを実行することもできます。 DOSでこのarticle

通常のコピーコマンドが

コピーoriginalfilenamewithpathのdestinationfilenamewithpathのようなものであるにそれを行うための方法が存在しています。

copyコマンドの詳細については、dosに移動してcopy /?と入力してEnterキーを押してください。

3

このファイルは別のプロセスで使用されているため、このファイルを削除することはできません。あなたがコードを開発するとき、それが発生したときに、他のプロセスはほとんど常にあなたプロセスであるため、

メッセージは、プログラマにひどく有用ではありません。

イメージファイルでイメージまたはビットマップオブジェクトを作成すると、ロックがファイルに記録されます。 GDI +はファイルコンテンツのメモリマップビューを作成するため、ロックが作成されます。これは、ページングファイルからビットマップデータを保持する強力な最適化です。大きな画像を大量に扱う場合は、数メガバイト相当のピクセルデータを含むことができます。

ロックは、コード内でDispose()メソッドを明示的に呼び出すまで保持されます。画像を保存し直す前に必ず行ってください。まれに、イメージのコピーを作成して元のイメージを破棄しなければならない場合があります。イメージ引数を取るBitmap()コンストラクタオーバーロードを使用します。

+0

ありがとう、私はこれが私の解決策だと思う、私はそれをテストし、結果を教えます。 –

関連する問題