मैं Windows पर पढ़ी जाने वाली फ़ाइल का नाम क्यों नहीं बदल सकता, जैसा कि मैं लिनक्स / मैक पर कर सकता हूं?


23

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


2
एक बंद फ़ाइल का नाम बदलना विंडोज पर कोई समस्या नहीं है। हटाने आमतौर पर, ऐसे कुछ प्रोग्राम हैं जो फ़ाइल को FILE_SHARE_DELETE विकल्प के साथ खोलते हैं।
हंस पासंत

आपने वास्तव में इसे हटाया नहीं था, आपने इसे उस निर्देशिका से अनलिंक कर दिया था जो अभी भी है। फ़ाइल अभी भी मौजूद है, इसका केवल फ़ाइल सिस्टम में कोई नाम नहीं हो सकता है। (हालाँकि यह अभी भी /procउस प्रोग्राम के माध्यम से फाइलसिस्टम में एक नाम है जो इसे खुला है।) एक फ़ाइल को केवल तभी हटाया जा सकता है जब उसके लिए कोई संदर्भ नहीं बचा हो, और यह स्वचालित रूप से होता है।
डेविड श्वार्ट्ज

जवाबों:


36

जब भी आप Windows में किसी फ़ाइल को खोलते या निष्पादित करते हैं, तो Windows उस स्थान पर फ़ाइल को लॉक कर देती है (यह एक सरलीकरण है, लेकिन आमतौर पर सच है।) एक प्रक्रिया द्वारा लॉक की गई फ़ाइल को तब तक हटाया नहीं जा सकता जब तक कि यह प्रक्रिया जारी नहीं हो जाती। यही कारण है कि जब भी विंडोज को खुद को अपडेट करना होता है तो आपको प्रभावी होने के लिए रिबूट की आवश्यकता होती है।

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


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

4
यदि आपने ऐसी फ़ाइल हटा दी थी जो उपयोग में थी, और आप इसे लिनक्स पर वापस लाना चाहते थे, तो आप इस प्रश्न में वर्णित फ़ाइल की प्रविष्टि / खरीद पा सकते हैं ।
केन ब्लूम

2
यह कुछ हद तक सामान्यीकरण है - इन दिनों सभी विंडोज अपडेट नहीं (विंडोज 7 पर) को रिबूट की आवश्यकता होती है, और मैंने लिनक्स पर बहुत कुछ किया है।
एलन बी

10

विंडोज स्वचालित, अनिवार्य फ़ाइल लॉकिंग के लिए चूक करता है। मैनुअल, सहकारी फ़ाइल लॉक करने के लिए डिफ़ॉल्ट UNIXes। दोनों ही मामलों में, चूक अधिक हो सकती है, लेकिन दोनों ही मामलों में वे आमतौर पर नहीं होती हैं।

बहुत सारे पुराने विंडोज कोड fopenदेशी API (फ़ंक्शन जैसे CreateFile) के बजाय C / C ++ API (फ़ंक्शन जैसे ) का उपयोग करते हैं । C / C ++ API आपको यह निर्दिष्ट करने का कोई तरीका नहीं देता है कि लॉकिंग कैसे अनिवार्य होगी, इसलिए आपको डिफॉल्ट मिलते हैं। डिफ़ॉल्ट "शेयर मोड" "परस्पर विरोधी" कार्यों को प्रतिबंधित करता है। यदि आप लिखने के लिए एक फ़ाइल खोलते हैं, तो लेखन को संघर्ष मान लिया जाता है, भले ही आप वास्तव में फ़ाइल पर कभी नहीं लिखते हैं। नाम बदलने के लिए डिट्टो।

और, यहां जहां यह खराब हो जाता है। पढ़ने या लिखने के लिए खोलने के अलावा, C / C ++ API यह निर्दिष्ट करने का कोई तरीका नहीं प्रदान करता है कि आप फ़ाइल के साथ क्या करना चाहते हैं। इसलिए एपीआई को यह मान लेना होगा कि आप कोई कानूनी कार्यवाही करने जा रहे हैं। के बाद से ताला अनिवार्य है, एक openहै कि अनुमति देता है एक परस्पर विरोधी आपरेशन से इनकार कर दिया हो जाएगा, भले ही कोड परस्पर विरोधी कार्रवाई करने के लिए इरादा कभी नहीं लेकिन सिर्फ एक और उद्देश्य के लिए फ़ाइल को खोलने गया था।

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

मेरी राय में, विंडोज विधि UNIX विधि की तुलना में बहुत बेहतर काम करेगी यदि प्रत्येक कार्यक्रम अपने शेयर मोड और खुले मोड को बुद्धिमानी से और अच्छी तरह से विफलता के मामलों को चुने। यूनिक्स विधि, हालांकि, बेहतर काम करती है अगर कोड इन मुद्दों के बारे में सोचने के लिए परेशान नहीं करता है। दुर्भाग्य से, बेसिक C / C ++ API विंडोज फाइल एपीआई पर अच्छी तरह से मैप नहीं करता है जो शेयर मोड को हैंडल करता है और परस्पर विरोधी अच्छी तरह से खुलता है। तो शुद्ध परिणाम थोड़ा गड़बड़ है।


0

यह एक बहुत ही दिलचस्प सवाल है और इसने मुझे एक व्यवहार्य उत्तर के बारे में सोचने पर मजबूर कर दिया है। मुझे उम्मीद है कि अन्य लोग यहां बैकअप प्रदान कर सकते हैं।

मैं विंडोज और लिनक्स दोनों का उपयोग करता हूं और इस पर भी ध्यान दिया है। मैं भी विम का उपयोगकर्ता हूँ। विम एक पाठ फ़ाइल को 'बफर', या रैम में पढ़ेगा, और तब तक वास्तविक फ़ाइल को न छुएं जब तक कि आप सहेज नहीं लेते। लिनक्स सभी फाइलों के साथ सामान्य रूप से इस तरह की कार्रवाई कर सकता है।

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

विंडोज़ कुछ मामलों में बहुत 'सुरक्षित' ओएस है क्योंकि यह आपको ऐसा नहीं करने देगा। यह फ़ाइलों को उसी तरह से बफर कर सकता है जो लिनक्स करता है, लेकिन आपको या अन्य कार्यक्रमों को रोकने के लिए फ़ाइल लॉकिंग भी जोड़ता है, उन फ़ाइलों को बदलने से जिन्हें आप काम कर रहे हैं या देख रहे हैं। यह फ़ाइल को अक्षुण्ण रखने में मदद करता है और आपको या अन्य कार्यक्रमों को एक-दूसरे के परिवर्तनों को लिखने से रोकता है।


आप वास्तव में इसे हटा नहीं सकते । बस इसे चारों ओर ले जाएं और इसका नाम बदलें।
डैनियल बेक

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