2011-06-06 10 views
15

के साथ सफलतापूर्वक खोला गया है, तो मेरे पास निम्न है जो पढ़ने के लिए फ़ाइल खोल देगा। हालांकि, मैं यह सुनिश्चित करने के लिए जांचना चाहता हूं कि फ़ाइल सफलतापूर्वक खुलती है, इसलिए मैं यह देखने में असफल रहा हूं कि झंडे सेट किए गए हैं या नहीं।जांच कर रहा है कि फ़ाइल को ifstream

मैं, सी ++ के लिए नया हूँ के रूप में मैं सी से आ रहा हूँ तो यकीन नहीं है कि मैं इस त्रुटि को समझें:

cannot call member function ‘bool std::basic_ios<_CharT, _Traits>::fail() const [with _CharT = char, _Traits = std::char_traits]’ without object

कोड:

int devices::open_file(std::string _file_name) 
{ 
    ifstream input_stream; 

    input_stream.open(_file_name.c_str(), ios::in); 

    if(ios::fail() == true) { 
     return -1; 
    } 

    file_name = _file_name; 

    return 0; 
} 

उत्तर

15

हालांकि, मैं निम्नलिखित त्रुटि प्राप्त हो रही आप बस कर सकते हैं:

int devices::open_file(std::string _file_name) 
{ 
    ifstream input_stream;  
    input_stream.open(_file_name.c_str(), ios::in); 
    if(!input_stream) 
    { 
     return -1; 
    } 
    file_name = _file_name; 
    return 0; 
} 

असफल() एक स्थिर तरीका नहीं है, तो आप एक उदाहरण के एक प्रकार नहीं पर यह कॉल करना होगा ताकि यदि आप असफल() का उपयोग करना चाहते हैं, तो ऊपर दिए गए कोड में input_stream.fail() के साथ !input_stream को प्रतिस्थापित करें।

मुझे आश्चर्य है कि आप यहां क्या हासिल करने की कोशिश कर रहे हैं। आप फ़ाइल खोल रहे हैं और इसे तुरंत बंद कर दें। क्या आप बस यह जांचने की कोशिश कर रहे हैं कि फ़ाइल मौजूद है या नहीं?

+0

नमस्ते, धन्यवाद। होवेवर, मैं बस सोच रहा हूं कि असफल झंडा मेरे लिए क्यों काम नहीं करता? – ant2009

+1

'input_stream.fail()' का उपयोग करके '! Input_stream' जैसा ही प्रभाव होना चाहिए। जैसा कि मैंने कहा था, आप 'ios :: विफल()' का उपयोग नहीं कर सकते क्योंकि यह एक उदाहरण विधि है, स्थिर विधि नहीं। – Sven

+3

कृपया, 'ifosream' के साथ 'ios :: in' ध्वज का उपयोग क्यों करें? – nn0p

1

आपको स्ट्रीम ऑब्जेक्ट पर असफल() कॉल करना होगा। ऐसा करने का एक अधिक मुहावरेदार तरीका है: क्योंकि आप एक स्थिर विधि जब यह वास्तव में एक सदस्य के रूप में विधि है ios::fail() उपयोग कर रहे हैं

input_stream.open(_file_name.c_str(), ios::in); 

if(! input_stream) { 
    return -1; 
} 
3

आपका त्रुटि है।

if (input_stream.fail()) 
{ 
    ... 
} 
2

आप std::ifstream::is_open का भी उपयोग कर सकते हैं। यदि कोई फ़ाइल खुली है और इस स्ट्रीम ऑब्जेक्ट से जुड़ी है तो सत्य वापस आता है। जवाब के लिए

// ifstream::is_open 
#include <iostream>  // std::cout 
#include <fstream>  // std::ifstream 

int main() { 
    std::ifstream ifs ("test.txt"); 

    if (ifs.is_open()) { 
    // print file: 
    char c = ifs.get(); 
    while (ifs.good()) { 
     std::cout << c; 
     c = ifs.get(); 
    } 
    } 
    else { 
    // show message: 
    std::cout << "Error opening file"; 
    } 

    return 0; 
} 

http://www.cplusplus.com/reference/fstream/ifstream/is_open/

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

  • कोई संबंधित समस्या नहीं^_^