จะลบฮาร์ดไดรฟ์ Windows NTFS (mklink / h) ในขณะที่ใช้งานอยู่เดิมได้อย่างไร?


10

ในระบบไฟล์ Windows NTFS ฉันมีไฟล์ (พูดorig.mp3) ฉันเปิดไฟล์นี้ผ่านเส้นทางนี้orig.mp3ในแบบที่มันถูกใช้งาน (พูดโดยการเล่นมันใน VLC)

จากนั้นฉันจะสร้างฮาร์ดลิงก์ ( cmd /c mklink /h link.mp3 orig.mp3) ซึ่งส่งผลให้สองเส้นทาง NTFS ชี้ไปที่ไฟล์เดียวกัน

ในที่สุดฉันก็พยายามลบไฟล์ที่เชื่อมโยงอีกครั้ง ( del link.mp3หรือลบใน Windows Explorer)

สิ่งนี้ล้มเหลวด้วยข้อผิดพลาด: "กระบวนการไม่สามารถเข้าถึงไฟล์ได้เนื่องจากกำลังถูกใช้โดยกระบวนการอื่น"

ทำไม? และที่สำคัญ: ฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร (นอกเหนือจากการทำให้แน่ใจว่าไม่มีกระบวนการใดที่มีไฟล์ต้นฉบับที่ใช้งานอยู่) ฉันอาจบอกให้ Windows ทำ 'การลบล่าช้า' เพื่อให้ไฟล์ที่เชื่อมโยงถูกลบโดยอัตโนมัติเมื่อต้นฉบับไม่ได้ใช้งานอีกต่อไป?


2
ควรถูกถามเกี่ยวกับ superuser แต่ก็ยัง: movefileควรจะสามารถทำเคล็ดลับในกรณีใด ๆ เป็นเรื่องที่น่าแปลกใจที่คุณไม่สามารถลบการเชื่อมโยงฮาร์ดไดรฟ์ได้ แต่จริงๆแล้วควรเป็นไฟล์ "ไม่เกี่ยวข้อง" อย่างสมบูรณ์
Damon

คำตอบ:


11

นี่เป็นพฤติกรรมที่คาดไว้ค่อนข้างยากลิงก์คือชื่ออื่นสำหรับไฟล์เดียวกัน เช่นถ้าคุณมีไฟล์ A.PDF ให้สร้างฮาร์ดลิงก์ B.PDF ไปที่ไฟล์เดียวกันมันไม่สำคัญว่าไฟล์จะถูกเปิดภายใต้ชื่อ A.PDF หรือ B.PDF - ยังคงเป็นไฟล์เดียวกันดังนั้นหาก ไฟล์นี้เปิดขึ้นโดยง่ายคุณไม่สามารถลบลิงก์ใดลิงก์หนึ่งได้

เหตุผลที่แท้จริงคือชื่อถูกเก็บไว้เป็นแอตทริบิวต์ในบันทึกไฟล์ของตารางไฟล์ต้นแบบ (ในกรณีของ NTFS) และเนื่องจากไฟล์ถูกเปิดคุณจะไม่สามารถลบลิงค์ใดลิงก์หนึ่ง (คุณไม่สามารถแก้ไขไฟล์ที่เปิด)

ในกรณีนี้ไม่มีอะไรเหมือนไฟล์ต้นฉบับเนื่องจากทั้งสองชื่อเป็นไฟล์เดียวกัน (และมีเพียงไฟล์เดียว) และชื่อทั้งสองเท่ากัน ไฟล์ถูกลบจริงเมื่อจำนวนลิงค์ถึงศูนย์


ขอบคุณสำหรับคำตอบนี้เพื่อ "ทำไม" อย่างที่คุณเห็นฉันได้เพิ่มคำตอบของตัวเองใน "วิธีหลีกเลี่ยง"
MarnixKlooster ReinstateMonica

4
"ทำไม" ไม่สมบูรณ์; หากการลบฮาร์ดลิงก์เป็นการเปลี่ยนแปลงดังนั้นจะเป็นการเพิ่มฮาร์ดไดรฟ์ แต่คุณสามารถเพิ่มฮาร์ดลิงก์ไปยังไฟล์ที่เปิดอยู่ได้เพียงแค่ไม่ลบหรือเปลี่ยนชื่อ ฉันคิดว่า "ทำไม" เป็นเพียงการตัดสินใจว่าจะไม่สามารถเปลี่ยนชื่อหรือลบลิงก์ในขณะที่เปิดไฟล์ การตัดสินใจออกแบบโดยเจตนา
RomanSt

2

ใช้เครื่องมือ FSUTIL เพื่อดูแล symlink อย่างปลอดภัย

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

fsutil reparsepoint delete link.mp3

จะลบฮาร์ดลิงก์ออกในขณะที่รักษาorig.mp3


2
แต่มันจะใช้งานได้กับฮาร์ดลิงก์หรือไม่? ฉันไม่เชื่ออย่างนั้น
Daniel B

ฉันได้รับสิ่งนี้ Error: The process cannot access the file because it is being used by another process.
ST3

ล้มเหลว. เหมือนกับ @ ST3
Señor CMasMas

1

ตามรายละเอียดในคำตอบของ Robert Goldweinลิงก์ดังกล่าวจะไม่สามารถลบได้ในขณะที่ไฟล์นั้นถูกใช้งาน อย่างไรก็ตามการลบล่าช้ากลายเป็นไปได้

ความคิดเห็นของDamonในคำถามนี้แนะนำให้ใช้movefileจาก Sysinternals Suite

ในกรณีของฉันที่ฉันต้องการทำสิ่งนี้จาก PowerShell ฉันสามารถใช้ Lee Holmes's เพื่อให้ Windows ลบไฟล์ในการบูตครั้งถัดไปMove-LockedFilelink.mp3 $null

ทั้งการใช้งานดังกล่าวข้างต้นฟังก์ชัน Win32 MoveFileEx กับMOVEFILE_DELAY_UNTIL_REBOOTธง

อัปเดต:ดูhttps://gist.github.com/marnix/7565364สำหรับRemove-File-Eventuallyที่ฉันเพิ่งแฮ็ก ไม่มีการรับประกัน :-)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.