यदि आपके पास फ़ाइल का पथ है (उदाहरण के लिए, /home/bob/test/foo.txt) जहां पथ में प्रत्येक उपनिर्देशिका मौजूद हो या न हो, तो मैं फ़ाइल को foo.txt कैसे बना सकता हूं "/home/bob/test/foo.txt" का उपयोग केवल एक ही पथ में प्रत्येक गैर-निर्देशिका निर्देशिका बनाने के बजाय एकमात्र इनपुट के रूप में करता है और अंत में foo.txt स्वयं बना देता है?पर्ल में एक शॉट में मैं अपनी सभी उपनिर्देशिकाओं के साथ पथ कैसे बना सकता हूं?
उत्तर
आप का उपयोग File::Basename और File::Path
use strict;
use File::Basename;
use File::Path qw/make_path/;
my $file = "/home/bob/test/foo.txt";
my $dir = dirname($file);
make_path($dir);
open my $fh, '>', $file or die "Ouch: $!\n"; # now go do stuff w/file
मैं अगर फ़ाइल पहले से मौजूद है, लेकिन है कि पर्ल के साथ जोड़ने के लिए बहुत आसान है देखने के लिए किसी भी परीक्षण में नहीं जोड़ा था कर सकते हैं।
उपयोग make_dir from File::Util
use File::Util;
my($f) = File::Util->new();
$f->make_dir('/var/tmp/tempfiles/foo/bar/');
# optionally specify a creation bitmask to be used in directory creations
$f->make_dir('/var/tmp/tempfiles/foo/bar/',0755);
मैं वहाँ एक मानक समारोह है कि फ़ाइल नाम से सीधे आप क्या पूछना सभी कर सकते हैं, है नहीं लगता।
लेकिन mkpath(), मॉड्यूल फ़ाइल :: पथ से, लगभग फ़ाइल नाम की निर्देशिका को दे सकता है। फ़ाइल :: पथ डॉक्स से:
"mkpath" समारोह निर्देशिका बनाने के लिए एक सुविधाजनक तरीका प्रदान, भले ही आपके "mkdir" कर्नेल कॉल पर निर्देशिका के एक से अधिक स्तर नहीं बना होगा एक वक़्त।
ध्यान दें कि mkpath() त्रुटियों को एक अच्छी तरह से रिपोर्ट नहीं करता है: किसी कारण से, यह केवल शून्य लौटने की बजाय मर जाता है।
सब देखते हुए, आप की तरह कुछ कर सकता:
use File::Basename;
use File::Path;
my $fname = "/home/bob/test/foo.txt";
eval {
local $SIG{'__DIE__'}; # ignore user-defined die handlers
mkpath(dirname($fname));
};
my $fh;
if ([email protected]) {
print STDERR "Error creating dir: [email protected]";
} elsif (!open($fh, ">", $fname)) {
print STDERR "Error creating file: $!\n";
}
अंतर्निहित कोड लगभग दो दशकों पुराना है, और तब से प्रोग्रामिंग फैशन बहुत बदल गए हैं। आप पुरानी शैली फ़ाइल :: पथ इंटरफ़ेस का उपयोग कर रहे हैं। नया इंटरफ़ेस आपको सभी त्रुटियों को पकड़ने और उचित (या अनदेखा) के साथ सौदा करने की अनुमति देता है। – dland
पता है कि वहां एक नया इंटरफ़ेस है। मुझे पोर्टेबल पर्ल लिखने के लिए उपयोग किया जाता है जो पुराने संस्करणों और ओएस के पार (इसलिए, दो-बहस खुला()) के लिए काम करता है, इसलिए मैं आमतौर पर पर्ल में नया क्या सीखकर खुद को चिढ़ाता हूं। :-) –
@ माइकल: मैं समझता हूं कि आपको किसी भी कारण से पुराने पर्ल लिखने की आवश्यकता हो सकती है, लेकिन मुझे समझ में नहीं आता कि आप इस तरह के कोड को दूसरों के लिए उदाहरण क्यों पोस्ट करेंगे। यदि आप 'ओपन' के तीन-तर्क रूप से अवगत हैं, तो कृपया इसे यहां चारों ओर उपयोग करें। हमें दो-तर्क फ़ॉर्म के नेट पर अधिक उदाहरणों की आवश्यकता नहीं है; हमारे पास पहले से कहीं ज्यादा है। – Telemachus
- 1. मैं पर्ल में एक बाइनरी फ़ाइल कैसे बना सकता हूं?
- 2. मैं अपनी पर्ल स्क्रिप्ट में अंतर्राष्ट्रीयकरण कैसे जोड़ सकता हूं?
- 3. मैं पर्ल में कॉलम आउटपुट कैसे बना सकता हूं?
- 4. मैं पर्ल क्लास कैसे बना सकता हूं?
- 5. मैं पर्ल में 2 डी सरणी कैसे बना सकता हूं?
- 6. मैं पर्ल में ज़िप संग्रह कैसे बना सकता हूं?
- 7. मैं पर्ल में हैश का हैश कैसे बना सकता हूं?
- 8. मैं सी कोड में पर्ल हैश कैसे बना सकता हूं?
- 9. मैं गो में क्रॉसप्लेटफार्म फ़ाइल पथ कैसे बना सकता हूं?
- 10. मैं पर्ल में सापेक्ष/अनुमानित तिथियां कैसे बना सकता हूं?
- 11. मैं एक यादृच्छिक पथ कैसे बना सकता हूं?
- 12. क्या मैं पर्ल में जावा जैसी इंटरफेस बना सकता हूं?
- 13. मैं एक पर्ल कमांड में निर्देशिका और पैरेंट निर्देशिका कैसे बना सकता हूं?
- 14. मैं पर्ल में स्थिर के रूप में एक नेस्टेड हैश कैसे बना सकता हूं?
- 15. मैं बैच फ़ाइल कैसे बना सकता हूं जो केवल उपनिर्देशिकाओं को स्थानांतरित करेगा, और मास्टर निर्देशिका
- 16. मैं अपने पर्ल सीजीआई प्रोग्राम को कैसे बना सकता हूं?
- 17. मैं पर्ल के नेट :: एलडीएपी के साथ एक जटिल क्वेरी कैसे बना सकता हूं?
- 18. मैं पर्ल में एक सरणी कैसे छोटा कर सकता हूं?
- 19. मैं ब्लॉक के साथ एक सहायक कैसे बना सकता हूं?
- 20. मैं पर्ल से पीडीएफ टेबल कैसे बना सकता हूं?
- 21. मैं अपनी स्ट्रिंग तुलना केस असंवेदनशील कैसे बना सकता हूं?
- 22. मैं पर्ल से एक्सएमएल कैसे बना सकता हूं?
- 23. मैं पर्ल एप्लिकेशन में सभी 'मरने के साथ' कबूल 'को कैसे बदल सकता हूं?
- 24. मैं SQL में एक प्रतिस्थापन पैटर्न कैसे बना सकता हूं?
- 25. मैं पर्ल के साथ निर्देशिका में सभी फ़ाइलों को कैसे सूचीबद्ध कर सकता हूं?
- 26. मैं पर्ल में HTTP :: Async के साथ एक समय में 25 अनुरोध कैसे कर सकता हूं?
- 27. मैं स्ट्रॉबेरी पर्ल के साथ प्रोग्राम कैसे चला सकता हूं?
- 28. मैं पर्ल में एक नया, खाली हैश संदर्भ कैसे बना सकता हूं?
- 29. मैं डिफॉल्ट कन्स्ट्रक्टर के साथ अपनी कक्षा का सरणी कैसे बना सकता हूं?
- 30. मैं पर्ल में एक सशर्त प्रतिस्थापन कैसे कर सकता हूं?
मुझे लगता है कि आप 'mkpath', नहीं' make_path' मतलब है? अन्यथा, अच्छा जवाब। – hobbs
@ हॉब्स: 'फ़ाइल :: पथ' के लिए दस्तावेज़ों की जांच करें। 'mkpath' को "विरासत" के रूप में वर्णित किया गया है, और नया इंटरफ़ेस उस फ़ंक्शन के लिए' make_path' का उपयोग करता है। – Telemachus
आह, यह एक हालिया परिवर्तन है। मेरे पास संस्करण में इंटरफ़ेस नहीं है। :) – hobbs