オリジナルの使用中にWindows NTFSハードリンク(mklink / h)を削除する方法


10

Windows NTFSファイルシステムでは、ファイルがあります(たとえば、orig.mp3)。このファイルを、このpathを介してorig.mp3、使用中の方法で(たとえば、VLCで再生して)開きます。

次に、ハードリンクを作成します(cmd /c mklink /h link.mp3 orig.mp3)。これにより、2つのNTFSパスがまったく同じファイルを指します。

最後にdel link.mp3、リンクされたファイルをもう一度削除しようとします(またはWindowsエクスプローラーで削除します)。

これはエラーで失敗します。「別のプロセスが使用しているため、プロセスはファイルにアクセスできません。」

どうして?さらに重要なことですが、どうすればこれを回避できますか(元のファイルが使用されているプロセスがないことを確認することは別として)?元のファイルが使用されなくなったときにリンクファイルが自動的に削除されるように、「遅延削除」を実行するようにWindowsに指示できますか?


2
おそらくスーパーユーザーに尋ねるべきです。しかし、それでもなお、movefileはどのような場合でもトリックを実行できるはずです。ただし、ハードリンクを単純に削除できないのは驚くべきことですが、実際には完全に「無関係」のファイルである必要があります。
デイモン

回答:


11

これは予想される動作であり、ハードリンクは同じファイルの別の名前にすぎません。たとえば、ファイルA.PDFがある場合、同じファイルへのハードリンクB.PDFを作成します。ファイルがA.PDFまたはB.PDFという名前で開かれているかどうかは関係ありません。このファイルは単に開かれるだけで、どちらのリンクも削除できません。

実際の理由は、名前がマスターファイルテーブルのファイルレコードに属性として格納され(NTFSの場合)、ファイルが開かれているため、どちらのリンクも削除できない(開いているファイルを変更できない)ためです。

この場合、両方の名前が同じ(そして唯一の)ファイルに属し、両方の名前が等しいため、元のファイルのようなものはありません。リンク数がゼロになると、ファイルは実際に削除されます。


「なぜ」に対するこの回答をありがとう ご覧のとおり、「回避方法」に独自の回答を追加しました。
MarnixKlooster ReinstateMonica 2013

4
「なぜ」は不完全です。ハードリンクを削除することが変更である場合は、ハードリンクを追加することになりますが、ハードリンクを追加してファイルを開くことができます。ファイルの削除や名前の変更はできません。「なぜ」は、ファイルが開いている間はハードリンクの名前を変更したり削除したりできないことが決定されたというだけのことだと思います。意図的な設計の決定。
RomanSt 2014年

2

FSUTILツールを使用して、シンボリックリンクを安全に維持します。

http://technet.microsoft.com/en-ca/library/cc753059.aspx

fsutil reparsepoint delete link.mp3

orig.mp3を保持しながらハードリンクを削除します


2
しかし、これはハードリンクで機能しますか?私はそうは思いません。
ダニエルB

ええと...私はこれを手に入れた。Error: The process cannot access the file because it is being used by another process.
ST3、2015年

不合格。@ ST3と同じ。
セニョールCMasMas

1

Robert Goldweinの回答に詳述されているように、ファイルが使用されている間は、そのようなハードリンクを削除することはできません。ただし、遅延削除は可能であることが判明しました。

この質問に対するDamonのコメントは、Sysinternals Suiteのmovefileを使用することを示唆しています。

私の場合、PowerShellからこれを実行する場合、Lee Holmesのを使用して、Windowsに次回の起動時にファイルを削除させることができます。Move-LockedFilelink.mp3 $null

上記の両方で、MOVEFILE_DELAY_UNTIL_REBOOTフラグを指定してWin32 MoveFileEx関数を使用します。

更新:https : //gist.github.com/marnix/7565364を参照して、Remove-File-Eventuallyハックしたところを確認してください。保証なし。:-)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.