2012-01-12 13 views
27

मैं आईओओ फ़ाइल के लिए std :: fstream का उपयोग करने की कोशिश कर रहा हूं, और यदि फ़ाइल पहले से मौजूद नहीं है तो मैं फ़ाइल बनाना चाहता हूं।std :: fstream फ़ाइल नहीं बनाता

std::fstream my_stream 
    my_stream.open("my_file_name",std::fstream::binary | std::fstream::in | std::fstream::out); 
    if(!my_stream) 
     std::cout<<"error"<<strerror(errorno); 

मैं इस परिणाम मिलता है: "। ऐसा कोई फ़ाइल या निर्देशिका"

मैं इस मामले में फ़ाइल कैसे बना सकता हूं?

उत्तर

38

आप fstream::open() पर अपने कॉल में std::fstream::in निर्दिष्ट कर रहे हैं। यह मौजूदा फ़ाइल की आवश्यकता के लिए known है।

या तो अपने mode तर्क से std::fstream::in हटाएं, या अन्य ध्वजियों के अतिरिक्त std::fstream::trunc निर्दिष्ट करें।

+20

और यह नोट करते हुए कि 'trunc' हर बार एक खाली फ़ाइल बनाता है। –

10

यह थोड़ा गन्दा है लेकिन काम करता है। अगर यह मौजूद है तो फाइल को ओवरराइट नहीं करता है लेकिन पहला खुला असफल होने पर नया बनाता है।

std::fstream my_stream 
my_stream.open("my_file_name",std::fstream::binary | std::fstream::in | std::fstream::out); 

if(!my_stream) 
{ 
    my_stream.open("my_file_name",std::fstream::binary | std::fstream::trunc | std::fstream::out);  
    my_stream.close(); 
    // re-open with original flags 
    my_stream.open("my_file_name",std::fstream::binary | std::fstream::in | std::fstream::out); 
} 
else 
{ 
    // read something 
} 

// read/write here 
+0

आप उस दूसरे करीबी() को हटा सकते हैं। इसे झंडे के साथ खोलना "बाइनरी | इन | आउट | ट्रंक" ठीक काम करेगा। – TorbenC

+0

इस पर बहुत देर हो चुकी है, लेकिन my_stream.open ("my_file_name", std :: fstream :: बाइनरी | std :: fstream :: trunc | std :: fstream :: out); बस my_stream.open ("my_file_name", std :: ios :: out) हो; ? यह सिर्फ क्षण बनाने के लिए है ... – user2962533

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