ऐसा लगता है कि OpenOptions
इस परिदृश्य का समर्थन नहीं करता है और एक मौजूदा फ़ाइल को या तो छोटा या ओवरराइट किया जाएगा।क्या फ़ाइल मौजूद और खोलने का कोई तरीका है यदि यह अस्तित्व में नहीं है लेकिन अन्यथा विफल रहता है?
उत्तर
जंग 1.9.0 के रूप में, OpenOptions::create_new
है जो आपको सुरक्षित रूप से और परमाणु रूप से सुनिश्चित करता है कि आप एक नई फ़ाइल बना रहे हैं, और आपका आदेश अन्यथा विफल हो जाएगा।
अद्यतन: जैसा कि मैथ्यू डेविड ने टिप्पणियों में बताया। exists()
std::path::Path
से यह देखने के लिए उपयोग किया जा सकता है कि कोई पथ मौजूद है या नहीं।
ओल्ड उत्तर:
! access(filename, F_OK)
access
रिटर्न 0 यदि फ़ाइल मौजूद है, बशर्ते कि आपके पास:
सी में, एक फ़ाइल नाम/पथ आमतौर पर साथ किया जाता है मौजूद है, तो जाँच आवश्यक अनुमतियां
मैंने देशी जंग के बराबर एक त्वरित खोज की और कुछ भी नहीं मिला। इसलिए, इसके लिए आपको
libc::access
पर निर्भर रहने की आवश्यकता हो सकती है।
यह सी 11 में संभव है, या निम्न स्तर के ओएस एपीआई कार्यों का उपयोग करके सीधे संभव है।
यदि आप C11 का उपयोग करते हैं, तो fopen
आपको फ़ाइल को "wx"
मोड में खोलने की अनुमति देता है।
अन्यथा, लिनक्स पर, O_CREAT
और O_EXCL
open(3)
फ़ंक्शन दोनों को पास करना चाहिए। या, विंडोज़ पर dwCreationDisposition
CreateFile()
फ़ंक्शन के पैरामीटर को पास करें।
संपादित करें: मैं मूल रूप से तथ्य यह है कि open
समारोह सी 11 में अद्यतन किया गया था याद किया।
- 1. बैश: यदि फ़ाइल मौजूद नहीं है, तो फ़ाइल बनाएं, अन्यथा यह देखने के लिए जांचें कि यह लिखने योग्य है
- 2. यदि कोई फ़ाइल मौजूद नहीं है तो
- 3. सीपी फ़ाइल कैसे करें यदि यह अस्तित्व में नहीं है, तो अन्यथा त्रुटि फेंक दें?
- 4. क्या करना है यदि गिट-एम विफल रहता है "इंडेक्स में मौजूद नहीं है"?
- 5. MySQL: यदि पंक्ति मौजूद नहीं है, तो सम्मिलित करें, अन्यथा .. क्या कोई आसान आदेश है?
- 6. यदि दावा विफल रहता है, तो क्या कोई बग है?
- 7. क्या होगा यदि नया विफल रहता है?
- 8. CREATE TABLE नहीं मौजूद है, तो तालिका के साथ विफल रहता है पहले से मौजूद है
- 9. फ़ाइल को निकालें यदि यह मौजूद है
- 10. केवल फ़ाइल बनाने के लिए कैसे करें यदि यह अस्तित्व में नहीं है?
- 11. फ़ाइल बनाएं यदि यह पहले से मौजूद नहीं है
- 12. यदि कोई अन्य मौजूद नहीं है तो JQuery में कोई तत्व चुनने का कोई शानदार तरीका है?
- 13. यदि दावा विफल रहता है तो रणनीति क्या है
- 14. एलैस्टिकसेच चुपचाप विफल रहता है यदि दस्तावेज़
- 15. यह जांचने का सबसे अच्छा तरीका क्या है कि कोई S3 ऑब्जेक्ट मौजूद है या नहीं?
- 16. जेएसपी संपादक, क्या यह अस्तित्व में है?
- 17. क्या यह निर्धारित करने का कोई तरीका है कि दिनांक/समय मौजूद नहीं है या नहीं?
- 18. फ़ाइल मौजूद है, लेकिन प्राप्त ENOENT त्रुटि
- 19. पिंग विफल रहता है लेकिन http लिंक
- 20. बनाएँ यदि मौजूद नहीं है
- 21. विफल रहता है, लेकिन कोई त्रुटि ऑब्जेक्ट वापस नहीं किया जाता है। क्यूं कर?
- 22. यदि कोई अस्तित्व में नहीं है तो इंटरमीडिएट फ़ोल्डर्स बनाएं
- 23. एवीडी शुरू करने में विफल रहता है, कह रहा है कि यह एमुलेटर नहीं ढूंढ सकता है, लेकिन यह
- 24. यदि यह मौजूद नहीं है तो कोई सरणी में कोई तत्व पुश करें (कोई डुप्लीकेट नहीं)
- 25. एक्समरिन स्टूडियो एफ # फाइलें खोलने में विफल रहता है
- 26. यदि गेटड्रिन्फो विफल रहता है तो यह हमेशा के लिए विफल रहता है (नेटवर्क तैयार होने के बाद भी)
- 27. MongoDB- अगर यह मौजूद नहीं है, तो डालें, अन्यथा
- 28. सत्यापन दिखाएं यदि सत्यापन विफल रहता है
- 29. स्क्रिप्ट वेबस्टॉर्म में विफल रहता है लेकिन टर्मिनल से नहीं
- 30. क्या emacsclient (उपयोगकर्ता) के साथ फ़ाइल खोलने का कोई तरीका है लेकिन रूट अनुमति के साथ?
क्या यहां दौड़ की स्थिति के लिए यह संभव है, जहां फ़ाइल 'पहुंच' के बाद अस्तित्व में आती है लेकिन 'ओपन' से पहले? – Shepmaster
@ शेमपस्टर हां। और मेरा मानना है कि मैंने इस बारे में कवरिटी स्कैन चेतावनी देखी है। लेकिन विकल्प क्या है? –
आपको एक असुरक्षित फ़ंक्शन का उपयोग करने की आवश्यकता क्यों होगी? आप जांच सकते हैं कि कोई पथ मौजूद है ['मौजूद()'] (https://doc.rust-lang.org/std/path/struct.Path.html#method.exists) और फिर फ़ाइल को बनाते समय बनाएं 'टी। –