2016-10-26 5 views
5

मैं stat विधि here के लिए मैन्युअल पढ़ रहा हूँ और यह कहते हैं:क्यों उपयोग कर रहा है fstat अनुशंसित नहीं

एक फ़ाइल के होने की जाँच करने के लिए fs.stat() का उपयोग fs.open बुला (से पहले), fs.readFile() या fs.writeFile() की अनुशंसा नहीं की जाती है। इसके बजाए, उपयोगकर्ता कोड को फ़ाइल को सीधे खोलना/पढ़ना/लिखना चाहिए और फ़ाइल को उपलब्ध नहीं होने पर त्रुटि को संभालना चाहिए।

यह जांचने के लिए कि फ़ाइल बाद में इसे बिना किसी चिपकाए बिना मौजूद है, fs.access() की अनुशंसा की जाती है।

तो, मैं दो सवाल है:

  • क्यों का उपयोग कर त्रुटि हैंडलर फ़ाइल होने की जाँच करने के लिए fs.stat() से अधिक तरह से पसंद किया जाता है?

  • और चूंकि मैं फ़ाइल अस्तित्व की जांच के लिए fs.access() का उपयोग कर सकता हूं, error handler तंत्र का उपयोग कर रहा है यह सुनिश्चित करने के लिए अभी भी पसंदीदा तरीका है?

मुझे लगता है कि मैं दूसरे प्रश्न का उत्तर मिल गया है:

fs.open बुला() से पहले किसी फ़ाइल की पहुँच के लिए जाँच करने के लिए fs.access() का उपयोग करना, FS। readFile() या fs.writeFile() की अनुशंसा नहीं की जाती है। ऐसा करने से दौड़ की स्थिति शुरू होती है, क्योंकि अन्य प्रक्रियाएं को दो कॉल के बीच फ़ाइल की स्थिति बदल सकती हैं। इसके बजाए, उपयोगकर्ता कोड फ़ाइल को खोल/पढ़/लिखना चाहिए और फ़ाइल पहुंच योग्य नहीं है तो उठाई गई त्रुटि को संभालना चाहिए।

तो शायद fs.open() ब्लॉक, अन्य प्रक्रियाओं के लिए फ़ाइल fs.stat() और fs.access() बस जानकारी के लिए अनुरोध और अन्य प्रक्रियाओं अभी भी/बदल सकते हैं फ़ाइल को नष्ट करते हुए।

+0

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

+0

अलग-अलग: आपका प्रश्न सिर्फ * दूसरे * उद्धृत पैराग्राफ के बारे में है, है ना? पहले उद्धृत अनुच्छेद में 'fs.access'' के साथ कुछ लेना देना नहीं है (और * इसकी * अनुशंसा स्पष्ट करने का कारण बनता है)। –

+1

[उपयोगी टिप्पणी] (http://stackoverflow.com/questions/32748530/on-linux-is-access-faster-than-stat#comment53341880_32748530) – robertklep

उत्तर

3

मुझे विश्वास है कि क्या यहाँ स्पष्ट कर दिया जाना चाहिए कि fs.stat और fs.access दोनों को खोलने से पहले एक फाइल की पहुंच के लिए जाँच की विशेष मामले के लिए अनुशंसित नहीं कर रहे हैं। जैसा कि सवाल में उल्लेख किया गया है, यह दौड़ की स्थिति को ट्रिगर कर सकता है। इस कारण से exists() और existsSync() को बहिष्कृत किया गया था (संस्करण 4 के आसपास) (और एपीआई से संबंधित कुछ अन्य): अक्सर इस उद्देश्य के लिए उनका शोषण किया जाता था।

फ़ाइल खोलने की कोशिश करते समय, यदि फ़ाइल पहुंच योग्य नहीं है तो ऑपरेशन पहले से ही एक त्रुटि ट्रिगर करेगा। इसलिए, इस तरह के चेक यहां संभाला जाना चाहिए। अन्यथा, more than one reasonable way to check if a file exists है।

यह भी ध्यान रखें कि, संस्करण 6.8.0, existsSync() के रूप में अपरिचित है! discussion और 6.8.0 changelog देखें। उपर्युक्त नियम लागू होते हैं: यदि आप फ़ाइल को बाद में खोलना नहीं चाहते हैं तो केवल इसका उपयोग करें।

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