2009-05-22 11 views
16

मुझे पता है कि फ़ाइल फ़ाइल ऑपरेटर-बी का उपयोग कर सकते हैं यह जांचने के लिए कि फ़ाइल बाइनरी है या नहीं, लेकिन पर्ल इसे आंतरिक रूप से कैसे कार्यान्वित करता है?पर्ल को फाइल कैसे पता है बाइनरी है?

उत्तर

26
perldoc -f -B से

:

-T और -B स्विच काम इस प्रकार है। फ़ाइल के पहले ब्लॉक या फ़ाइल की अजीब पात्रों जैसे अजीब नियंत्रण कोड या उच्च बिट सेट वाले वर्णों के लिए जांच की जाती है। यदि बहुत सारे अजीब वर्ण (> 30%) पाए जाते हैं, तो यह -B फ़ाइल है; अन्यथा यह -T फ़ाइल है। साथ ही, में शून्य वाले किसी भी फ़ाइल को पहली ब्लॉक को बाइनरी फ़ाइल माना जाता है। यदि -T या -B फ़ाइलहेडल पर उपयोग किया जाता है, तो मौजूदा आईओ बफर की पहली ब्लॉक की बजाय की जांच की जाती है। -T और -B दोनों फाइलें हैंडल परीक्षण करते समय पर एक शून्य फ़ाइल, या EOF पर एक फ़ाइल पर वापस लौटें। क्योंकि आपको परीक्षण करने के लिए अवसरों पर फ़ाइल को पढ़ने के लिए -f का उपयोग करना चाहते हैं, जैसा कि " next unless -f $file && -T $file" में है।
+1

जादू स्टेट कैश चरित्र "_" का उपयोग करने का अवसर है: "अगली जब तक -फ $ फ़ाइल और -टी _" –

10

पुस्तक सीखना पर्ल के अध्याय 11 के अनुसार:

जवाब है ** पर्ल धोखा देती है **: यह फ़ाइल को खोलता है, पहले कुछ हजार बाइट्स पर लग रहा है, और एक शिक्षित अनुमान बनाता है । यदि यह बहुत सारे शून्य बाइट्स, असामान्य नियंत्रण वर्ण, और उच्च बिट सेट के साथ बाइट्स देखता है, तो यह एक बाइनरी फ़ाइल की तरह दिखता है। अगर बहुत अजीब सामान नहीं है, तो यह पाठ की तरह दिखता है। कभी-कभी गलत लगता है। यदि किसी टेक्स्ट फ़ाइल में बहुत सारे स्वीडिश या फ़्रेंच शब्द होते हैं (जिनमें उच्च बिट सेट के साथ वर्णित वर्ण हो सकते हैं, कुछ आईएसओ -885 9-कुछ संस्करण, या शायद एक यूनिकोड संस्करण भी), तो यह बार्ल को बाइनरी घोषित करने में मूर्ख हो सकता है। तो यह सही नहीं है, लेकिन अगर आपको संकलित फाइलों से अपने स्रोत कोड को अलग करना है, या पीएनजी से एचटीएमएल फाइलों को अलग करना है, तो इन परीक्षणों को चाल चलनी चाहिए।
+0

मुझे नहीं पता कि मैं "धोखाधड़ी" पर विचार करूंगा या नहीं। ऐसा नहीं है कि वास्तव में कोई बेहतर तरीका है। – friedo

+0

अच्छी तरह से फ़ाइल खोलने के बाद, इसकी तरह धोखाधड़ी, नहीं सोचता – TStamper

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