c++ - EOF before EOF in Visual Studio -
मेरे पास एक कार्यक्रम (दृश्य स्टूडियो 2005 में) में इस स्निपेट था:
if ( _eof (fp- & gt; _file)) {ब्रेक; } जब एओफ़ पहुंचा था तो इसे बंद करने वाला लूप टूट गया। लेकिन कार्यक्रम फाइल में पिछले कुछ हज़ारों वर्णों को पार्स करने में सक्षम नहीं था। तो, यह जानने के लिए कि क्या हो रहा था, मैंने ऐसा किया:
अगर (_eof (fp- & gt; _file)) {cout & lt; & lt; ftell (fp) & lt; & lt; endl ; टूटना; } अब जवाब है कि मुझे फ़ोटेल से मिला वास्तविक फ़ाइल आकार (जो अपेक्षित नहीं है) से भिन्न (और छोटे) था। मैंने सोचा कि विंडोज़ को फाइल के साथ कुछ समस्या हो सकती है, फिर मैंने यह किया:
अगर (_eof (fp- & gt; _file)) {cout & lt; & lt; ftell (fp) & lt; & lt ; endl; फेसेक (एफपी, 0, SEEK_END); अदालत के & lt; & lt; ftell (एफपी) के & lt; & lt; endl; टूटना; } खैर, गड़बड़ी () ने सही उत्तर दिया (फ़ाइल आकार के बराबर) और आरंभिक फीट () विफल (पहले बताए गए अनुसार)।
संपादित करें: फ़ाइल "आरबी" मोड में खुली है।
आप _eof () से एक फ़ाइल डिस्क्रिप्टर पर FILE * से प्राप्त नहीं कर सकते हैं, क्योंकि फाइल * स्ट्रीम बफ़ेड हैं इसका अर्थ है कि fp ने चूहा है fp-> gtc: _file सूखे और शेष बाइट को अपने आंतरिक बफर में संग्रहीत करता है अंततः fp- & gt; _file ईओफ़ की स्थिति में है, जबकि fp आपके पढ़ने के लिए अब भी बाइट्स है यह निर्धारित करने के लिए feof () के बाद का उपयोग करें, यह निर्धारित करने के लिए कि क्या आप फ़ाइल के अंत में हैं और सावधान रहें यदि आप फ़ंक्शन का मिश्रण करते हैं जो कि FILE * पूर्णांक फ़ाइल डिस्क्रिप्टर पर ऑपरेटिंग के साथ।
Comments
Post a Comment