perl - मैं कैसे जांच सकता हूं कि पर्ले में एक फ़ाइल हैंडल खुला है या नहीं?




file-io filehandle (4)

क्या यह जांचने का कोई तरीका है कि पर्ल में फ़ाइल पहले से खुली है या नहीं? मैं एक पठन फ़ाइल का उपयोग करना चाहता हूं, इसलिए flock आवश्यकता नहीं है।

 open(FH, "<$fileName") or die "$!\n" if (<FILE_IS_NOT_ALREADY_OPEN>);
 #  or something like
 close(FH) if (<FILE_IS_OPEN>);

आप ऐसा क्यों करना चाहते हो? एकमात्र कारण मैं सोच सकता हूं कि जब आप पुराने स्टाइल पैकेज फ़ाइलहेडल्स (जो आप ऐसा कर रहे हैं) का उपयोग कर रहे हैं और गलती से दूसरे पर एक हैंडल को सहेजना चाहते हैं।

नई समस्या अप्रत्यक्ष फ़ाइल हैंडल का उपयोग कर उस मुद्दे को हल किया जा सकता है।

open my $fh, '<', $filename or die "Couldn't open $filename: $!";

कृपया openhandle() Scalar::Util openhandle() से openhandle() बारे में उत्तर देखें। जो मूल मैंने मूल रूप से लिखा था वह एक बार सबसे अच्छा था जिसे हम कर सकते थे, लेकिन अब यह बुरी तरह पुराना है।


बताएं चेतावनी उत्पन्न करता है (इसलिए स्टेट, -s, -e, आदि ..) use warnings साथ (-w)

perl -wle '
    open my $fh, "<", "notexists.txt"; 
    print "can stat fh" if tell $fh
'
tell() on closed filehandle $fh at -e line 1.
-1

विकल्प fileno($fh) और eof($fh) चेतावनियां उत्पन्न नहीं करते हैं। मैंने पाया कि आउटपुट को open से बचाने के लिए सबसे अच्छा विकल्प था।


यदि आप पहले से ही खुले हैं तो आप परवाह क्यों करते हैं? क्या आप एक साथ पढ़ने को पकड़ने की कोशिश कर रहे हैं?

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







filehandle