2008-11-20 10 views
12

कोई सी ++ स्ट्रीम खुलने पर कोई विशिष्ट त्रुटि स्थिति प्राप्त करने का कोई तरीका है? यानी, यह विफल रहा है क्योंकि फ़ाइल मौजूद नहीं थी, या अनुमतियां गलत थीं, या आदि। मूल रूप से मैं सादे सी में fopen() के लिए इरनो के समतुल्य कार्यक्षमता की तलाश में हूं।क्या कोई सी ++ स्ट्रीम खुलने पर आपको एक विशिष्ट त्रुटि स्थिति मिल सकती है?

जीसीसी ठीक से गलत तरीके से सेट करना प्रतीत होता है , लेकिन ऐसा लगता है कि सी ++ मानक द्वारा इसकी आवश्यकता नहीं है और मैं यह निर्धारित नहीं कर सकता कि क्या यह धाराओं को लागू करने के तरीके या एक जानबूझकर विशेषता का एक आर्टिफैक्ट है (और इस प्रकार मुझे नहीं पता कि यह पूरे संस्करण)।

क्या इस जानकारी को विश्वसनीय सी ++ में या गलती से एक या अधिक प्रमुख कंपाइलरों में प्राप्त करने का कोई तरीका है?

उत्तर

0

विजुअल स्टूडियो फॉपेन में और जैसे अंतिम त्रुटि कोड मान सेट करें। इसे GetLastError() के साथ पुनर्प्राप्त किया जा सकता है। परिणाम these मानों में से एक होगा।

+0

क्या आपके पास वीएस दस्तावेज़ में यह कहां रखा गया है? मैं एमएसडीएन पर स्ट्रीम पेज देख रहा हूं लेकिन मुझे इस व्यवहार का कोई उल्लेख नहीं मिल रहा है। मैं यह नहीं कह रहा हूं कि यह इस तरह काम नहीं करता है लेकिन कुछ आधिकारिक दस्तावेज़ देखना अच्छा होगा। –

+0

मुझे नहीं लगता कि यह वीएस दस्तावेज़ों में रखी गई है। या शायद मेरा google-foo बहुत कमजोर है। हालांकि मुझे कई फ़ोरम पोस्टों को मेरी यादों का समर्थन करने के लिए मिला है जो फॉपेन और जैसे ही उनके समकक्ष Winapi कार्यों के आसपास सभी रैपर हैं। तो fopen वास्तव में CreateFile को कॉल कर रहा है, जो त्रुटि कोड सेट करता है। भले ही, एक त्वरित परीक्षण इसे सहन करना चाहिए (कम से कम फ़ाइल त्रुटियों को अनुकरण करने के लिए आसान)। मैं इसे स्वयं करता हूं और परिणाम पोस्ट करता हूं। लेकिन, हां, इस समय मेरे पास दृश्य स्टूडियो तक आसानी से पहुंच नहीं है। –

4

आप सामान्य कारणों से आईओएस झंडे (बैडबिट, ईफिट, असफलता, गुडबिट) देख सकते हैं। आईओएस :: खराब(), आईओएस :: असफल(), आईओएस :: ईओएफ(), या आईओएस :: अच्छा() का उपयोग करके परीक्षण करना आसान होगा। आईओएस :: अपवाद() का उपयोग करते हुए स्ट्रीम को त्रुटि पर अपवाद उत्पन्न करने के लिए भी सेट किया जा सकता है।

विस्तृत I/O त्रुटि रिपोर्टिंग कुछ कार्यान्वयन में उपलब्ध हो सकती है, जैसा कि आप जीसीसी के लिए इंगित करते हैं। आपको विभिन्न संकलकों के लिए इस व्यवहार पर भरोसा करना पड़ सकता है। यदि एकाधिक कंपाइलर्स के लिए एक मौका है, तो परीक्षण करने के लिए सुनिश्चित करें और संभवतः मौजूदा कंपाइलर आदि को जांचने के लिए प्रीप्रोसेसर स्टेटमेंट्स शामिल करें।
जहां तक ​​मुझे पता है, एकमात्र अन्य जगह जिस पर चर्चा की गई है वह proposed TR2 additions में है।

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

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