2009-04-02 21 views
10

मैं एक उपयोगिता लिखने की कोशिश कर रहा हूं जो विंडोज़ में फ़ाइलों को स्थानांतरित करने की अनुमति देगा, और जब इसे उपयोग में फ़ाइल मिलती है, तो उस फ़ाइल को रीबूट पर ले जाया जाएगा।विंडोज़: उपयोग में फ़ाइल को ओवरराइट करें

ऐसा लगता है कि MoveFileEx (http://msdn.microsoft.com/en-us/library/aa365240(VS.85).aspx) इस के लिए सही कॉल है, लेकिन मैं समझ नहीं क्या त्रुटि कोड मैं देखना है कि फाइल प्रयोग में था से GetLastError (http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx) की तलाश में हूँ।

मैं वास्तविक अनुमति समस्या होने पर उपयोगिता विफल होना चाहता हूं। क्या आप वहां से अलग-अलग लिखने के लिए वैसे भी हैं और एक इन-यूज ओवरराइट त्रुटि?

इसके अलावा, अगर मेरे पास फाइलें हैं जो मैं उपयोगकर्ता के अस्थायी फ़ोल्डर में आगे बढ़ रहा हूं, तो क्या वे विलंबित नाम से पहले हटा दिए जाएंगे?

+0

महान प्रश्न +1 ;-) – Raj

उत्तर

10

यह देखने के लिए कि फ़ाइल उपयोग में है या नहीं, आपको पहले CreateFile पर कॉल करना होगा। यदि फ़ाइल उपयोग में है

देखने के लिए:

आप तो एक मान्य फ़ाइल हैंडल मिलता है आप जानते हैं कि फ़ाइल एक प्रक्रिया पहले से ही इस फ़ाइल खुला है साथ साझाकरण अनुमतियां परस्पर विरोधी नहीं है।

यदि आप कोई साझाकरण एक्सेस (0 CreateFile कॉल के dwShareMode पैरामीटर में 0) निर्दिष्ट नहीं करते हैं, तो यदि कोई अन्य प्रक्रिया वर्तमान में उस फ़ाइल का उपयोग किसी भी तरीके से कर रही है तो आपको फ़ाइल हैंडल नहीं मिलेगा। इस मामले में GetLastError वापसी होगी: अगर उस फ़ाइल, CreateFile कॉल होगा तक पहुँचने अनुमतियों की समस्या है

देखने के लिए: अगर वहाँ फ़ाइल तक पहुँचने के साथ एक सुरक्षा समस्या है ERROR_SHARING_VIOLATION (32)


देखने के लिए असफल भी एक अलग GetLastError के साथ। आपको मिलेगा: ERROR_ACCESS_DENIED (5)

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