2010-02-08 11 views
5

मुझे एक फ़ाइल को हटाने की जरूरत है। कभी-कभी, फ़ाइल को लॉक किया जा सकता है, इस मामले में मैं इसे अनलॉक करना चाहता हूं और इसे वैसे भी हटा देना चाहता हूं।सी # में फ़ाइल को मजबूती से अनलॉक कैसे करें?

अब तक अनुसंधान में दो संभावनाएं आई हैं।

System.IO.FileStream.Unlock

और

//unlock file 
[DllImport("kernel32.dll", SetLastError = true)] 
internal static extern bool UnlockFile(IntPtr handle, int offsetLow, int offsetHi);` 

इन दोनों तरीकों में से किसी काम करेगा? यदि हां, तो क्या आप एक नमूना प्रदान कर सकते हैं क्योंकि मुझे इनमें से कोई भी काम करने के लिए नहीं मिला है। या, क्या कोई और बेहतर तरीका है?

उत्तर

0

PSTools उपयोगिता का उपयोग करके समाप्त हुआ, ठीक काम करने लगता है।

2

आपको देरी हुई फाइल ऑपरेशंस का उपयोग करना चाहिए, How To Move Files That Are Currently in Use देखें ('इस' में 'मूव' शामिल है)।

अनलॉकफाइल और मित्र फ़ाइल क्षेत्र लॉकिंग ऑपरेशंस के लिए हैं, फ़ाइल हैंडल लॉकिंग के लिए नहीं, Locking and Unlocking Byte Ranges in Files देखें। Hopefuly वहाँ एक बंद फ़ाइल हैंडल अनलॉक करने के लिए कोई एपीआई है, कि काफी useles ताला लगा प्रस्तुत करना होगा ...

+2

विंडोज फ़ाइल लॉकिंग बेकार है - यह इतनी छोटी है कि बालों के ताले हर जगह जगह पर रहते हैं। – earcam

0

आप कर सकते थे एक पी बनाने/MoveFileEx और MOVEFILE_DELAY_UNTIL_REBOOT करने के लिए कॉल को लागू करने की कोशिश करने के लिए:

प्रणाली ऑपरेटिंग सिस्टम को पुनरारंभ होने तक फ़ाइल को तब तक नहीं ले जाता है। ऑटोचैच निष्पादित होने के बाद सिस्टम तुरंत फ़ाइल चलाता है, लेकिन किसी भी पेजिंग फाइल बनाने से पहले। नतीजतन, यह पैरामीटर फ़ंक्शन को पिछले स्टार्टअप से पेजिंग फ़ाइलों को हटाने में सक्षम बनाता है।

1

मैंने RedGates के परावर्तक में System.IO.FileStream.Unlock() को कॉल देखा और ऐसा लगता है कि यह बाहरी कॉल अनलॉकफाइल() को कॉल करता है। विधियां एक ही हैं।

हमारी वर्तमान रणनीति में देरी होनी है जब हमारे पास उचित उम्मीद है कि फ़ाइल अनलॉक होने वाली है, अन्यथा हम त्रुटि करते हैं।

+0

मुझे समझ में नहीं आया कि आपका क्या मतलब था ... –

संबंधित मुद्दे