2013-08-13 7 views
5

मेरे पास एक फ़ाइल है जिसे मैं स्क्रीन पर प्रिंट करने की कोशिश कर रहा हूं, लेकिन यह सब कुछ "0x28fe88" है, जब फ़ाइल दो सौ पंक्तियों से 13 कॉलम है।सी ++ मैं एक .txt फ़ाइल verbatim कैसे मुद्रित करूं?

#include <iostream> 
#include <fstream> 
#include <istream> 
#include <ostream> 
#include <cstdlib> 
using namespace std; 

int main() 
{ 
    //Opens .txt file 
    ifstream infile1; 
    infile1.open("Taylor.txt"); 

    //Fail check 
    if(infile1.fail()) 
    { 
     cout << "File failed to open.\n"; 
     exit(1); 
    } 

    //Prints file to screen (not correctly) 
    cout << infile1; 

    //Closes file 
    infile1.close(); 
    return 0; 
} 

मैं अन्यथा पूर्ण कोड पोस्ट नहीं करूंगा, लेकिन मुझे उम्मीद है कि यह फ्लाक पकड़ने के लिए पर्याप्त नहीं है।

+0

आप उस फ़ाइल की सामग्री को प्रिंट नहीं कर रहे हैं जिसे आप ifstream ऑब्जेक्ट प्रिंट कर रहे हैं। –

+2

'cout << infile1; * * stdout पर फ़ाइल सामग्री मुद्रित नहीं करता है। यह ऑब्जेक्ट पता प्रिंट कर रहा है। – greatwolf

+0

मूल कोड एक स्ट्रीम ऑब्जेक्ट को स्ट्रीम में डालता है। यह काम करता है क्योंकि, सी ++ 11 से पहले, स्ट्रीम क्लास (तकनीकी रूप से, बेस क्लास 'basic_ios') में 'void *' का रूपांतरण होता है जो इंगित करता है कि स्ट्रीम एक अच्छी स्थिति में है (यदि शून्य नहीं है तो एक शून्य सूचक देता है , और अन्यथा एक गैर-शून्य सूचक); मूल रूपांतरण प्रदर्शन इस रूपांतरण ऑपरेटर का परिणाम क्या है। सी ++ 11 में रूपांतरण अब मौजूद नहीं है; इसे 'स्पष्ट ऑपरेटर बूल()' के साथ प्रतिस्थापित किया गया है, जो गैर-बूलियन संदर्भों में रहस्यमय रूपांतरणों को पेश किए बिना एक ही उद्देश्य पर कार्य करता है। –

उत्तर

8

टेक्स्ट फ़ाइल को मुद्रित करने के लिए इस cout << infile1.rdbuf(); का उपयोग करें, क्योंकि अब आप फ़ाइल में एक पॉइंटर प्रिंट कर रहे हैं।

संपादित करें: यदि यह आपके लिए काम नहीं करता है, तो इसकी सबसे नज़दीकी चीज चरित्र द्वारा फ़ाइल चरित्र को पढ़ना होगा। इसके चारों ओर अन्य तरीकों से तार का उपयोग कर रहे हैं, लेकिन इस कोड को ठीक करना होगा:

while(infile1.good()) 
    cout << (char)infile1.get(); 

यह चरित्र कोड पढ़ता है, जबकि फ़ाइल को पढ़ने के लिए अच्छा है और इसे तुरंत धर्मान्तरित (यूनिकोड के लिए कुछ संशोधनों की आवश्यकता हो सकती) चार के लिए और इसे प्रिंट करता है।

+0

यह पॉइंटर को भी प्रिंट करना चाहिए, इस बार पॉइंटर infile1 के बफर ऑब्जेक्ट को। इस कोड को आज़माएं: cout.rdbuf (infile1.rdbuf()); – Michael

+0

'cout << infile1.rdbuf() 'ठीक काम करता है, क्योंकि कौन जानता है :) – FrogTheFrog

+0

आप सही हैं, बस इसका परीक्षण किया है, ठीक काम करता है। – Michael

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