2008-10-22 10 views
17

मैं एक आईट्रीम का उपयोग कर रहा हूं जो स्ट्रिंगस्ट्रीम, ifstream या उपयोगकर्ता द्वारा परिभाषित स्ट्रीम प्रकार हो सकता है और मुझे यह जानने की ज़रूरत है कि, अगर ifstream के मामले में, यह बाइनरी मोड में खोला नहीं गया था (इसलिए मैं अपवाद फेंक सकता हूं) । मैंने निम्न विधि का प्रयास किया है:क्या यह जांचने का कोई तरीका है कि बाइनरी मोड में एक आईट्रीम खोला गया था या नहीं?

if ((_is.flags() & ios::binary) == 0) 
    throw exception(...) 

लेकिन कोई अपवाद कभी नहीं फेंक दिया गया है। परीक्षण इस मामले में विफल रहता है क्योंकि _is.flags() 0x201 और ios :: बाइनरी 0x20 देता है। क्या टेक्स्ट मोड में कोई स्ट्रीम खोला गया है, यह जानने का कोई तरीका है?

उत्तर

11

झंडे() ios_base::fmtflags लौटता है जो झंडे को स्वरूपित कर रहा है, जबकि बाइनरी ios_base::openmode ध्वज है। मुझे यकीन नहीं है कि धारा पहले से ही खुली होने के बाद इन्हें ढूंढने का कोई तरीका है या नहीं। मैं सोच रहा था कि शायद स्ट्रीमबफ वर्ग का वर्चुअल सदस्य था जो मदद कर सकता था, लेकिन वास्तव में ऐसा प्रतीत नहीं होता है।

+0

मुझे डर था कि यह मामला था। – Ferruccio

4

नहीं, इसका परीक्षण करने का कोई तरीका नहीं है।