मुझे मिल गया है, शायद मामूली सवाल है लेकिन मैं इसे समझ नहीं पा रहा हूं। ताजा VS8 सी ++ एक्सप्रेस परियोजना मेंवीएस 8 file.close() को संभाल नहीं सकता है; file.open() ;, क्यों?
fstream file;
file.open("data", ios::in);
if(!file.good()){
file.close();
file.open("data", ios::out);
if(!file.good()) cout<<"not good"<<endl;
file<<"test"<<endl;
file.close();
}
: मैं सरल कोड लिखा है। जब मैं इसे चलाता हूं और "डेटा" मौजूद नहीं होता है, तो यह फ़ाइल बनाता है, लेकिन "अच्छा नहीं" (दूसरा) भी देता है ताकि आउटपुट फ़ाइल में नहीं लिखा जा सके। और अब मजाकिया बात आती है। अगर मैं वीएस 10 सी ++ एक्सप्रेस और कोड :: ब्लॉक 12 में एक ही कोड संकलित करता हूं, तो यह ठीक काम करता है।
ऐसा क्यों है?
@edit मेरे दोस्त ने इसे अपने पीसी पर वीएस 8 सी ++ एक्सप्रेस के साथ भी चेक किया। उसके लिए भी काम करता है।
@ EDIT2 "समाधान" के साथ मेरी टिप्पणी के रूप में ही है:
.clear साथ failbit स्पष्ट करने के लिए मजबूर(); विधि काम करने लगती है। जब आप नए आईडीई में सीखते हैं तो उसे दर्द होता है और फिर उसे पुराने पर स्विच करना पड़ता है: /। Tho, यह अच्छा सबक देता है। धन्यवाद दोस्तों।
विभिन्न कंपाइलरों के पास कभी-कभी मानक के विभिन्न कार्यान्वयन होते हैं। विशेष रूप से माइक्रोसॉफ्ट कंपाइलर्स ... – Appleshell
आप 'good' के बजाय' is_open' का उपयोग कर सकते हैं। –
शायद पहली विफलता के बाद विफलता को साफ़ नहीं किया जा रहा है। ऐसा लगता है कि "ओपन" अब सी ++ 11 में सफलता पर असफलता को साफ़ करता है और शायद यह परिवर्तन कुछ नई मानक सुविधाओं की प्रत्याशा में वीएस -2010 में बनाया गया था (उन टैब पर क्लिक करें जो सी ++ 03 और सी + के बीच अंतर दिखाते हैं। +11 http://www.cplusplus.com/reference/fstream/fstream/open/) – statueuphemism