2013-08-13 18 views
5

Ho un file che sto cercando di stampare sullo schermo, ma tutto ciò che restituisce è "0x28fe88", quando il file stesso è di 13 colonne di un paio di centinaia di righe.C++ Come si stampa un file .txt testualmente?

#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; 
} 

avrei altrimenti non pubblicare il codice completo, ma spero che sia abbastanza breve da non giustificare la cattura antiproiettile.

+0

Non stai stampando il contenuto del file che stai stampando l'oggetto ifstream. –

+2

'cout << infile1;' * non * stampa il contenuto del file su stdout. Sta stampando l'indirizzo dell'oggetto. – greatwolf

+0

Il codice originale inserisce un oggetto flusso in un flusso. Funziona perché, prima di C++ 11, le classi di flusso (tecnicamente, la classe base 'basic_ios'), ha una conversione in' void * 'che indica se il flusso è in buono stato (restituisce un puntatore nullo se non lo è e un puntatore non nullo altrimenti); ciò che la visualizzazione del codice originale è il risultato di questo operatore di conversione. In C++ 11 la conversione non è più presente; è stato sostituito con 'explicit operator bool()', che ha lo stesso scopo senza introdurre misteriose conversioni in contesti non booleani. –

risposta

8

Per stampare solo file di testo, utilizzare questo cout << infile1.rdbuf();, perché ora si sta stampando un puntatore su un file.

MODIFICA: Se ciò non ha funzionato per voi, la cosa più vicina sarebbe leggere il file carattere per carattere. Ci sono altri modi intorno ad esso utilizzando corde, ma questo codice farà bene:

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

E 'legge il codice di carattere mentre il file è bene leggere e immediatamente la converte a char (potrebbe aver bisogno di alcune modifiche per Unicode) e lo stampa.

+0

Questo dovrebbe anche stampare un puntatore, questa volta il puntatore all'oggetto buffer di infile1. Prova questo codice: cout.rdbuf (infile1.rdbuf()); – Michael

+0

'cout << infile1.rdbuf()' funziona bene, perché chissà :) – FrogTheFrog

+0

Hai ragione, l'hai appena testato, funziona perfettamente. – Michael

Problemi correlati