मैं एक फ़ाइल से ब्लॉक पढ़ने की कोशिश कर रहा हूं और मुझे कोई समस्या है।अज्ञात आकार फ़ाइल से पढ़ने के लिए बफर का उपयोग
char* inputBuffer = new char[blockSize]
while (inputFile.read(inputBuffer, blockSize)) {
int i = inputFile.gcount();
//Do stuff
}
मान लीजिए हमारे ब्लॉक आकार 1024 bytes
है, और फ़ाइल 24,3 KiB
है। 23 वें ब्लॉक पढ़ने के बाद, 0,3 KiB
पढ़ने के लिए छोड़ दिया जाएगा। मैं भी 0,3 KiB
पढ़ना चाहता हूं, वास्तव में मैं gcount()
का उपयोग करता हूं, इसलिए मैं जान सकता हूं कि बफर में से कितने read(...)
संशोधित (यदि यह कम है)।
लेकिन जब यह 24 वें ब्लॉक तक पहुंचता है, read(...)
एक मान देता है जैसे प्रोग्राम लूप में प्रवेश नहीं करता है, जाहिर है क्योंकि फ़ाइल में शेष अपठित बाइट्स का आकार बफर आकार से कम है। मुझे क्या करना चाहिए?
आपको "okay = inputFile.read (...)" के बाद एक (ठीक है) शामिल करना चाहिए ताकि आप आश्वस्त कर सकें कि प्रोग्राम कभी भी अमान्य डेटा के साथ काम नहीं करेगा। ऐसा करें इसलिए मैं इसे एक स्वीकृत उत्तर के रूप में चिह्नित करता हूं। – Erandros
@ एन्डंडोस, कोई काम नहीं करेगा क्योंकि तब आप स्क्वायर 1 पर वापस आ गए हैं - आप अंतिम सब्सक्राइब किए गए ब्लॉक को संसाधित नहीं करेंगे! इसके बजाय शायद अगर (i) जोड़ें, तो डेटा होने पर केवल तभी सामग्री करें। –
आप सही हैं। मुझे अभी भी लगता है कि "अगर (lessThanBufferSizeFlag) होना चाहिए"। मुझे नहीं पता कि उस ध्वज मूल्य को कैसे प्राप्त किया जाए। – Erandros