2010-07-08 3 views
9

अस्वीकरण: मैं मुख्य रूप से एक लिनक्स/वेब डेवलपर हूं।क्या हम कभी भी विंडोज़ में एक खुली फ़ाइल को हटाने में सक्षम होंगे?

विंडोज़ में यह "अच्छी" सुविधा है जहां यह किसी भी प्रक्रिया द्वारा खोले गए किसी भी फ़ाइल को हटाने की अनुमति से इनकार करता है। तो यदि कोई एंटीवायरस गलत समय पर गलत फ़ाइल को हिट करता है, तो कुछ यादृच्छिक प्रोग्राम गलत व्यवहार और संभवतः क्रैश हो सकता है।

क्या मैं सही हूँ? क्या इसे ठीक करने की योजना है?

क्या आप में से कोई भी यह स्वीकार्य लगता है, या, उस समय यह संभवतः एक अच्छा विचार कैसा लग सकता है?

संपादित करें:

यह यूनिक्स पर बहुत अलग ढंग से काम करता है, और दशकों के लिए इसलिए किया गया है।

एक उदाहरण के रूप:

  • प्रक्रिया 1 पढ़ने के लिए, foo.txt खोलता है या लिखते हैं, या दोनों, कोई फर्क नहीं पड़ता
  • प्रक्रिया 2 फ़ाइल
  • फ़ाइल से अनलिंक करने के हटाता फाइल सिस्टम
  • प्रक्रिया 1 पढ़ना और/या लिखना जारी रखता है, फ़ाइल अभी भी मौजूद है, और जब तक डिस्क पर कमरा होता है तब तक यह बढ़ सकता है। यह उन अन्य प्रक्रियाओं से बस पहुंच योग्य नहीं है जिनके पास पहले से ही फ़ाइल संभाल नहीं है।
  • जब प्रक्रिया 1 फ़ाइल बंद कर देता है, है ना सुलभ से होगा कहीं भी

वास्तव में, यूनिक्स पर अस्थायी फ़ाइलों के लिए एक आम उपयोग पैटर्न है: खुले निकाल-पढ़ने/लिखने-पास।

+1

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

+0

लेकिन, अगर कोई फ़ाइल 1 को संसाधित करने वाली फ़ाइल को हटा देता है, तो 1 गलत व्यवहार या क्रैश कैसे संसाधित कर सकता है?फ़ाइल अभी भी वहां है, इसे पढ़ा या लिखा जा सकता है, अगर आपके पास पहले से ही एक फ़ाइल हैंडल नहीं है तो यह उपलब्ध नहीं है। –

+1

यह केवल कई दार्शनिक निर्णयों में से एक है जहां दो प्लेटफार्म अलग-अलग हैं। दोनों विधियों में उनके पेशेवर और विपक्ष होते हैं, हालांकि व्यक्तिगत रूप से मुझे किसी अन्य विधि की तुलना में बेहतर या खराब होने की विधि नहीं मिलती है। जब आप किसी प्लेटफ़ॉर्म के लिए विकसित होते हैं तो आपको इसकी idiosyncrasies से अवगत होना चाहिए और उन्हें उचित रूप से संभालना होगा। यदि आप ऐसा करने में विफल रहते हैं और आपका प्रोग्राम क्रैश हो जाता है तो आपका प्रोग्राम गलती पर है, मंच नहीं। – Luke

उत्तर

5

आपका प्रारंभिक विवरण सही नहीं है। विंडोज़ खुले फाइलों को हटाने की इजाजत देता है। आपको बस FILE_SHARE_DELETE निर्दिष्ट करना होगा और आप सभी सेट हैं। सावधान प्रोग्रामर को समझदारी से तय करना चाहिए कि क्या ध्वज (या पढ़ने/लिखने के लिए साझा करना) समझ में आता है और इसे पास करता है।

एक एंटी वायरस उत्पाद जो पूर्ण साझाकरण (हटाने सहित) फ़ाइलों को नहीं खोलता है वह छोटी है।

विंडोज, हालांकि, किसी भी प्रक्रिया की वर्तमान कार्यशील निर्देशिका को याद करता है और इसे हटाए जाने से रोकता है। यह कार्य निर्देशिका प्रक्रिया द्वारा खोले गए किसी भी फाइल के स्थान से स्वतंत्र है।

+0

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

+0

@ यूडॉक्सोस: आपका मतलब है कि विंडोज सभी मौजूदा कार्यशील निर्देशिकाओं के लिए निर्देशिका हटाने को कैसे रोकता है? क्या आपने http://blogs.msdn.com/b/oldnewthing/archive/2010/11/09/10087919.aspx पढ़ा था? निजी तौर पर, मैं इससे भी नाराज हूं, लेकिन ऐसा लगता है कि इसका कोई तकनीकी समाधान नहीं है। – mafu

+0

@ यूडॉक्सोस: "फ़ाइल प्रबंधक में खुला" के संबंध में, ऐसा लगता है कि मामला नहीं है। कम से कम विंडोज एक्सप्लोरर वर्तमान में प्रदर्शित फ़ोल्डर को हटाए जाने से नहीं रोकता है। – mafu

0

यह पूरी तरह स्वीकार्य है। ऐसी स्थिति की कल्पना करें जहां आप अपने एप्लिकेशन में डेटाबेस फ़ाइल पढ़ रहे हैं, और कुछ अन्य एप्लिकेशन आपके साथ सीधे डेटाबेस फ़ाइल को हटा देता है और हटा देता है। आपके एप्लिकेशन को यह जांचने के लिए कैसे पता चलता है कि फ़ाइल अभी भी मौजूद है? यह कैसे सुनिश्चित करेगा कि फ़ाइल स्ट्रीम को पढ़ने की अचानक कोशिश नहीं है कि फ़ाइल एक मिलीसेकंद हो सकती है, लेकिन अगली नहीं? यही कारण है कि कार्यक्रम फाइलों को लॉक कर सकते हैं, यह सुनिश्चित करने के लिए कि फ़ाइल हमेशा तब तक रहेगी जब तक प्रोग्राम निर्धारित करता है कि यह इसके साथ किया जाता है।

यह हमें बताने में और मददगार हो सकता है कि यह फ़ाइल लॉकिंग आपकी स्थिति में अवांछनीय क्यों है। मुझे यकीन है कि एंटी-वायरस प्रोग्राम फाइलों पर आशावादी लॉक करते हैं, जब तक कि यह उनकी सफाई नहीं कर लेता है।

+1

सपना देख सकता हूं यह एक घर के नीचे से नींव खींचने जैसा है। –

+0

स्पष्टता के लिए संपादित –

+0

प्रत्येक फ़ाइल I/O ऑपरेशन एक त्रुटि सिग्नल कर सकता है, इसलिए जब तक कि आप उन्हें जांचने के बारे में बेवकूफ नहीं हो जाते हैं, प्रदर्शन करने के लिए कोई अतिरिक्त जांच नहीं होगी। –

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

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