मूल उपयोग में होने के दौरान Windows NTFS हार्ड लिंक (mklink / h) कैसे हटाएं?


10

Windows NTFS फ़ाइल सिस्टम पर, मेरे पास एक फ़ाइल (कहना orig.mp3) है। मैं इस रास्ते के माध्यम से इस फ़ाइल को खोलता हूं, इस orig.mp3तरह से यह उपयोग में है (जैसे, इसे वीएलसी में खेलकर)।

फिर मैं एक कड़ी बनाता हूं ( cmd /c mklink /h link.mp3 orig.mp3)। इसके परिणामस्वरूप दो NTFS पथ एक ही फ़ाइल की ओर इशारा करते हैं।

अंत में मैं लिंक की गई फ़ाइल को फिर से हटाने ( del link.mp3या विंडोज एक्सप्लोरर में हटाने) का प्रयास करता हूं ।

यह एक त्रुटि के साथ विफल होता है: "यह प्रक्रिया फ़ाइल तक नहीं पहुंच सकती क्योंकि इसका उपयोग किसी अन्य प्रक्रिया द्वारा किया जा रहा है।"

क्यों? और अधिक महत्वपूर्ण बात: मैं इससे कैसे बच सकता हूं (यह सुनिश्चित करने के अलावा कि किसी भी प्रक्रिया में मूल फ़ाइल उपयोग में नहीं है)? क्या मैं शायद विंडोज को 'डिलीट डिलीट' करने के लिए कह सकता हूं, ताकि जब मूल उपयोग में न हो तो लिंक की गई फाइल अपने आप डिलीट हो जाए?


2
शायद सुपरसुसर पर पूछा जाना चाहिए। लेकिन फिर भी: चाल-चलन किसी भी मामले में चाल करने में सक्षम होना चाहिए। यह आश्चर्यजनक है कि आप केवल कठिन लिंक को हटा नहीं सकते हैं, वास्तव में यह पूरी तरह से "असंबंधित" फ़ाइल होना चाहिए।
डेमन

जवाबों:


11

यह काफी अपेक्षित व्यवहार है, कड़ी कड़ी उसी फ़ाइल का दूसरा नाम है। उदाहरण के लिए, यदि आपके पास A.PDF फ़ाइल है, तो उसी फ़ाइल के लिए हार्ड लिंक B.PDF बनाएँ, इससे कोई फर्क नहीं पड़ता कि फ़ाइल A.PDF या B.PDF के नाम से खोली गई है - यह अभी भी वही फ़ाइल है, इसलिए यदि यह फ़ाइल बस खोली गई है, आप लिंक को हटा नहीं सकते हैं।

वास्तविक कारण यह है कि नाम को मास्टर फ़ाइल टेबल (NTFS के मामले में) के फ़ाइल रिकॉर्ड में एक विशेषता के रूप में संग्रहीत किया जाता है और फ़ाइल खोलने के बाद, आप लिंक को हटा नहीं सकते हैं (आप खोली गई फ़ाइल को संशोधित नहीं कर सकते हैं)।

इस मामले में मूल फ़ाइल जैसा कुछ नहीं है, क्योंकि दोनों नाम एक ही (और केवल एक) फ़ाइल के हैं और दोनों नाम समान हैं। लिंक गिनती शून्य पर पहुंचने पर फ़ाइल वास्तव में हटा दी जाती है।


इस जवाब के लिए धन्यवाद "क्यों?" जैसा कि आप देख सकते हैं, मैंने अपना जवाब "कैसे बचें?"
मार्निक्स क्लोस्टर

4
"क्यों" अधूरा है; यदि हार्डलिंक हटाना एक संशोधन है, तो एक जोड़ रहा है, फिर भी आप हार्डलिंक को खुली फाइलों में जोड़ सकते हैं, बस उन्हें हटाएं या नाम न बदलें। मुझे लगता है कि "क्यों" सिर्फ इतना है कि यह निर्णय लिया गया था कि फ़ाइल के खुले रहने पर हार्डलिंक का नाम बदला या हटाया नहीं जा सकता है; एक जानबूझकर डिजाइन निर्णय।
रोमनस्टॉक

2

सिम्बल को सुरक्षित रूप से बनाए रखने के लिए FSUTIL टूल का उपयोग करें।

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

fsutil reparsepoint delete link.mp3

मूल को संरक्षित करते समय हार्डलिंक को हटा देगा .mp3


2
लेकिन क्या यह हार्ड लिंक्स पर काम करेगा? मैं ऐसा नहीं मानता।
डैनियल बी

खैर ... मुझे यह मिल गया। Error: The process cannot access the file because it is being used by another process.
ST3

असफल। @ ST3 के समान।
सीनियर सीएमसमास

1

जैसा कि रॉबर्ट गोल्डवेइन के जवाब में बताया गया है , ऐसी हार्ड लिंक को हटाया नहीं जा सकता है, जबकि फाइल उपयोग में है। हालाँकि, एक विलम्बित डिलीट संभव हो जाता है।

इस सवाल पर डेमन की टिप्पणी में सिसिन्टर्नल्स सुइट से हटने का उपयोग करने का सुझाव दिया गया है ।

मेरे मामले में, जहां मैं PowerShell से ऐसा करना चाहता हूं, मैं ली होम्स का उपयोग कर सकता हूं , अगले बूट पर विंडोज को फ़ाइल को हटाने के लिए।Move-LockedFilelink.mp3 $null

उपरोक्त दोनों MO32FILE_DELAY_UNTIL_REBOOT ध्वज के साथ Win32 MoveFileEx फ़ंक्शन का उपयोग करते हैं ।

अपडेट: देखें https://gist.github.com/marnix/7565364 एक के लिए Remove-File-Eventuallyजो मैं अभी तक हैक कर लिया। कोई गारंटी नहीं। :-)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.