ロックされたファイルは OS によって具体的にどのように処理されるのでしょうか?
あるいは、正確に言うと、Windows エクスプローラーからロックされたファイルを削除できないことがあるのに、問題のディレクトリでコマンド プロンプトを開くと、そこから削除できるのはなぜでしょうか。
答え1
プロセスがファイルまたはディレクトリへのハンドルを開くとき、必要な共有レベルを指定します。共有レベルは、FILE_SHARE_DELETE、FILE_SHARE_READ、および FILE_SHARE_WRITE フラグの任意の組み合わせにすることができます。フラグの名前は非常に明白です。FILE_SHARE_READ を指定すると、他のプロセスがファイルを読み取ることができ、FILE_SHARE_WRITE を指定すると、他のプロセスがファイルを書き込むことができ (知らないうちに変更される可能性があります)、FILE_SHARE_DELETE を指定すると、他のプロセスがファイルを削除できます (ただし、ファイル ハンドルを閉じるまで実際には削除されないと思います)。
いずれにせよ、いずれかのプロセスがファイルへのハンドルを開いてないFILE_SHARE_DELETE を指定すると、最初のプロセスがハンドルを閉じるまで、他のプロセスはファイルを削除できません。これが、「ファイルは別のプロセスによってロックされています」というエラーが発生する一般的な理由です。プロセスはディレクトリへのハンドルも開くことができるため、ディレクトリが空であっても、これはディレクトリの削除にも適用されることに注意してください。
エクスプローラーからはファイルを削除できないのに、コマンド プロンプトからはファイルを削除できるのはなぜか、私には理解できません。自分の目で確認する必要があります。
JR
答え2
John の言う通りです... 使用中のファイルは削除できません。なぜなら... 使用中だからです。通勤中にタイヤを交換できないのと同じ理由です。さまざまな予期せぬことが起きるでしょう。
どのプロセスがファイルを使用しているかを知りたい場合(一時的にプロセスを強制終了してファイルのロックを解除するには、プロセスエクスプローラーMicrosoft/Sysinternals より。
- [検索] メニューをクリックし、[ハンドルまたは DLL の検索] を選択します。
- 何らかのプロセスによってロックされているため削除できないファイル名を入力してください
- 検索語句を入力したら、検索ボタンをクリックします。
ファイルがWindowsで使用中の場合は、ムーブオンブートGibin Software により、再起動後にロックされたファイルを削除します。
答え3
エクスプローラーにサードパーティの拡張機能があり、ファイルをスキャンするために少しの間ファイルを開くと、エクスプローラーがファイルをロックするのではないかと思います。この問題が発生するのは、大きなファイルだけですか? ロックは Windows の世界ではロックであり、コマンド プロンプトではロックされたファイルを削除できません (ただし、上記のように、ロックを閉じてからファイルを削除する方法はあります)