Pada sistem file Windows NTFS, saya punya file (katakanlah, orig.mp3
). Saya membuka file ini, melalui jalur ini orig.mp3
, sedemikian rupa sehingga digunakan (katakanlah, dengan memainkannya dalam VLC).
Lalu saya membuat tautan keras ( cmd /c mklink /h link.mp3 orig.mp3
). Ini menghasilkan dua jalur NTFS yang menunjuk ke file yang persis sama.
Akhirnya saya mencoba menghapus file tertaut lagi ( del link.mp3
, atau menghapus di Windows Explorer).
Ini gagal dengan kesalahan: "Proses tidak dapat mengakses file karena sedang digunakan oleh proses lain."
Mengapa? Dan yang lebih penting: bagaimana saya bisa menghindari ini (selain memastikan tidak ada proses memiliki file asli digunakan)? Dapatkah saya memberi tahu Windows untuk melakukan 'penghapusan tertunda', sehingga file yang ditautkan dihapus secara otomatis ketika dokumen asli tidak lagi digunakan?
Jawaban:
Ini perilaku yang sangat diharapkan, tautan keras hanyalah nama lain untuk file yang sama. Misalnya, jika Anda memiliki file A.PDF, buat tautan keras B.PDF ke file yang sama, tidak masalah apakah file dibuka dengan nama A.PDF atau B.PDF - itu masih file yang sama, jadi jika file ini hanya dibuka, Anda tidak dapat menghapus tautan mana pun.
Alasan sebenarnya adalah bahwa nama tersebut disimpan sebagai atribut dalam catatan file tabel file master (dalam kasus NTFS) dan karena file dibuka, Anda tidak dapat menghapus salah satu tautan (Anda tidak dapat mengubah file yang dibuka).
Dalam hal ini tidak ada yang seperti file asli, karena kedua nama tersebut milik file yang sama (dan satu-satunya) dan kedua nama sama. File sebenarnya dihapus ketika jumlah tautan mencapai nol.
sumber
Gunakan alat FSUTIL untuk menjaga symlink dengan aman.
http://technet.microsoft.com/en-ca/library/cc753059.aspx
akan menghapus hardlink sambil mempertahankan orig.mp3
sumber
Error: The process cannot access the file because it is being used by another process.
Seperti dijelaskan dalam jawaban Robert Goldwein , tautan keras semacam itu tidak dapat dihapus saat file sedang digunakan. Namun, penghapusan yang tertunda ternyata dimungkinkan.
Komentar Damon tentang pertanyaan ini menyarankan untuk menggunakan movefile dari Sysinternals Suite.
Dalam kasus saya, di mana saya ingin melakukan ini dari PowerShell, saya dapat menggunakan Lee Holmes's , untuk membuat Windows menghapus file pada boot berikutnya.
Move-LockedFile
link.mp3 $null
Kedua hal di atas menggunakan fungsi Win32 MoveFileEx dengan bendera MOVEFILE_DELAY_UNTIL_REBOOT .
Pembaruan: Lihat https://gist.github.com/marnix/7565364 untuk
Remove-File-Eventually
yang baru saja saya retas. Tidak ada jaminan :-)sumber