2013-08-13 13 views
5

Mam plik, który próbuję wydrukować na ekranie, ale wszystko, co zwraca, to "0x28fe88", kiedy sam plik ma 13 kolumn za kilkaset wierszy.C++ Jak wydrukować plik .txt dosłownie?

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

W innym wypadku nie opublikowałbym pełnego kodu, ale mam nadzieję, że jest wystarczająco krótki, aby nie gwarantować złapania flaka.

+0

Nie drukujesz zawartości pliku, do którego drukujesz obiekt ifstream. –

+2

'cout << infile1;' * nie * drukuje zawartość pliku na standardowe wyjście. Drukuje adres obiektu. – greatwolf

+0

Oryginalny kod wstawia obiekt strumienia do strumienia. Działa to, ponieważ przed C++ 11, klasy strumieniowe (technicznie, klasa podstawowa 'basic_ios'), mają konwersję do' void * ', która wskazuje, czy strumień jest w dobrym stanie (zwraca wskaźnik zerowy, jeśli nie jest i w przeciwnym razie wskaźnik inny niż zerowy); co oryginalny kod wyświetla w wyniku tego operatora konwersji. W C++ 11 ta konwersja już nie występuje; został zastąpiony przez 'jawny operator bool()', który służy temu samemu celowi, bez wprowadzania tajemniczych konwersji w kontekstach nie-boolowskich. –

Odpowiedz

8

Aby wydrukować plik tekstowy, użyj tego cout << infile1.rdbuf();, ponieważ teraz drukujesz wskaźnik do pliku.

EDYTOWANIE: EDYCJA: Jeśli to nie zadziałało, najbliższą rzeczą byłoby odczytanie pliku po znaku. Istnieją inne sposoby wokół niego przy użyciu strun, ale ten kod wystarczyć:

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

Odczytuje kod znaku, gdy plik jest dobre do czytania i natychmiast konwertuje go do char (może wymagać pewnych modyfikacji dla Unicode) i drukuje to.

+0

Powinny również wydrukować wskaźnik, tym razem wskaźnik do obiektu bufora infile1. Wypróbuj ten kod: cout.rdbuf (infile1.rdbuf()); – Michael

+0

'cout << infile1.rdbuf()' działa dobrze, bo kto wie :) – FrogTheFrog

+0

Masz rację, właśnie przetestowałem to, działa dobrze. – Michael