2

私はC++MFCのWindowsでデスクトップアプリケーションを書いています。

アプリケーションはインデックスファイルを作成し、それに情報を何度も書き込みます。

アプリケーションがクラッシュした場合、次にアプリケーションを起動すると、クラッシュしたインデックスファイルが削除され、新しいインデックスファイルが作成されます。場合によっては、インデックスファイルがロックされると思います。ロックされたインデックスファイルを削除できないと、災害になります。

ファイルを削除して新しいファイルを作成できることをどのように保証できますか?他のアプリケーションがインデックスファイルを開かないようにすることができます。アプリケーションがクラッシュしたからといって削除することはできません。

誰か助けてもらえますか?

4

6 に答える 6

7

ファイルを開いたままにしておくプロセスがない場合、ファイルをロックしたままにする方法はありません。クラッシュしたプロセスが (ハングするのではなく) 実際に停止する限り、問題はないとわかるかもしれません。

別のプロセスがファイルを開いているときに、あるプロセスからファイルを削除できることを本当に確認する必要がある場合は、FILE_SHARE_DELETEフラグを使用してファイルを開くために両方のプロセスが必要です。

于 2009-09-15T13:06:44.560 に答える
3

ファイルのロックを解除するには、それに関連付けられているすべてのハンドルを閉じる必要があります。これを行う最善の方法は、まだ実行中の (そしてファイル ハンドルを所有している) クラッシュしたアプリケーションを終了することです。

クラッシュしたアプリケーションを見つけるには、この記事で説明されている手法を使用できます。これは、指定された名前のファイルのハンドルを検索するときにProcess Explorerが行うことです。

于 2009-09-15T13:07:21.977 に答える
0

ほとんどの場合、答えは「ロックされたファイルを削除することはできません」です。OSはあなたを許しません。

代わりに、このようなもので回避します。

  • 既存のインデックス ファイルを確認し、ロックが存在しない場合は削除します。
  • 新しいインデックス ファイルを作成します。最初の「名前」が取得された場合は、使用されていないものが見つかるまで index01 などをチェックし、それをこのプログラムの実行用のインデックス ファイルとして使用します。
  • 通常の終了時に、インデックス ファイルをクリアします。

ボーナス クレジット: ユーザーがクラッシュしたインデックス ファイルを自動的に削除する代わりに「回復」できるようにします。

于 2009-09-15T13:07:16.353 に答える
0

ロックされたファイルの名前を変更できる場合があります。ただし、おそらく、症状ではなく実際の問題を修正する必要があります。

于 2009-09-15T18:53:37.237 に答える
0

このツールの使用をお勧めします: http://lockhunter.com/download.htm

'%appdata%/Skype/my-user-profile' を削除できるため、Windows 8 で Skype アカウントのロックを解除するのに役立ちましたが、私の場合、他のツールや手順では役に立ちませんでした (「別の Skype インスタンスが存在する可能性がある」を参照)。 」、他の多くのユーザーも長い間噛んでいます)。

于 2013-05-09T10:18:09.870 に答える