2008-11-27 14 views
37

में लेखन stringstream सामग्री मैं वर्तमान में std::ofstream उपयोग कर रहा हूँ इस प्रकार है:ofstream

std::ofstream outFile; 
outFile.open(output_file); 

तब मैं इस प्रकार outFile करने के लिए एक std::stringstream वस्तु पारित करने का प्रयास:

GetHolesResults(..., std::ofstream &outFile){ 
    float x = 1234; 
    std::stringstream ss; 
    ss << x << std::endl; 
    outFile << ss; 
} 

अब मेरी outFile लेकिन कुछ भी नहीं है कचरा: "0012E708" सभी बार दोहराया।

GetHolesResults में मैं

outFile << "Foo" << std:endl; 

लिख सकते हैं और यह उत्पादन सही ढंग से outFile में होगा।

मैं क्या गलत कर रहा हूं पर कोई सुझाव?

+1

मैं सुझाव है कि आप की पंक्ति में कुछ करने के लिए शीर्षक अलग तरीके से व्यक्त: 'ofstream में stringstream सामग्री writting' (या महत्वपूर्ण कार्यों के लिए ostream) –

+1

एरिक, आप के रूप में स्वीकार जोहानिस 'जवाब निशान चाहिए, ताकि मैं नष्ट कर सकते हैं मेरा (जो उनके दृष्टिकोण से स्पष्ट रूप से खराब है) –

+1

ठीक है, किया गया। लेकिन दिनों में, मैंने आपके समाधान का उपयोग किया =) – Eric

उत्तर

67

आप ऐसा कर सकते हैं, जिसे स्ट्रिंग बनाने की आवश्यकता नहीं है। यह आउटपुट स्ट्रीम को दाईं ओर स्ट्रीम की सामग्री को पढ़ता है (किसी भी स्ट्रीम के साथ प्रयोग योग्य)।

outFile << ss.rdbuf(); 
+5

मैं उत्सुक हूं: यह समाधान 'std :: stringstream' के साथ क्यों काम करता है लेकिन' std :: ostringstream' के साथ नहीं? दूसरे मामले में मुझे एक खाली फाइल मिल रही है। –

+3

@JaviV क्योंकि आप [केवल लिख सकते हैं] (http://en.cppreference.com/w/cpp/io/basic_ostream) 'std :: oANYSTREAM' पर और केवल 'std :: iANYSTREAM' से पढ़ सकते हैं। 'Output_stream' के लिए कोई अर्थ नहीं होगा अगर यह 'पढ़ा' संचालन भी होगा। यदि आपको केवल 'std :: ANYSTREAM' का उपयोग करने की आवश्यकता है और आप घर हैं :) –

3

स्ट्रीमिंग न्यूलाइन के लिए स्ट्रिंगस्ट्रीम rdbuf को पारित करते समय अनुवाद नहीं किया जाता है। इनपुट टेक्स्ट में \n हो सकता है, इसलिए प्रतिस्थापन खोजें काम नहीं करेगा। पुराना कोड एक fstream को लिखा है और इसे एक स्ट्रिंगस्ट्रीम में अंत में अनुवाद को नुकसान पहुंचाता है।

+2

यह एक टिप्पणी नहीं होनी चाहिए क्योंकि आपने यह नहीं बताया है कि std :: stringstream को std :: ofstream – bitek

8

आप std::ostringstream का उपयोग कर और सोच क्यों कुछ नहीं ss.rdbuf() के साथ लिखा हो तो .str() फ़ंक्शन का उपयोग कर रहे हैं।

outFile << oStream.str(); 
+4

पर अपना उत्तर कैसे लिखना है मुझे निम्नलिखित अहसास के लिए प्रेरित किया: 'एसएस' से 'char' सरणी प्राप्त करने के लिए, आप 'ss.str()। c_str()' कर सकते हैं। (सिर्फ भविष्य में इस पर ठोकर खाने वाले नए लोगों के लाभ के लिए यहां पोस्ट करें।) – dbliss

+1

@ डिजिटल- वास्तविकता, धन्यवाद! जब मैंने rdbuff का उपयोग किया तो कुछ भी लिखा नहीं जा रहा था। इसका कारण क्या है? – Nasir

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