2013-08-13 25 views
5

Ekrana yazdırmaya çalıştığım bir dosyam var, ancak dosyanın kendisi bir çift yüz satırda 13 sütun olduğunda "0x28fe88" değeri döndürülüyor.C++ Bir .txt dosyasını nasıl yazdırabilirim?

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

başka türlü tam kod sonrası olmaz, ama uçaksavar yakalamak garanti etmez kadar kısa olduğunu umuyoruz.

+0

ifstream nesnesini yazdırdığınız dosyanın içeriğini yazdırmıyorsunuz. –

+2

'cout << infile1;' * dosya içeriğini stdout'a yazdırmaz. Nesne adresini yazdırıyor. – greatwolf

+0

Orijinal kod, bir akış nesnesini bir akışa ekler. Bunun nedeni, C++ 11'den önce, akış sınıflarının (teknik olarak, temel "basic_ios" temel sınıfı), akışının iyi durumda olup olmadığını belirten "void *" dönüşümü vardır (eğer değilse, boş gösterici döndürür) ve sıfır olmayan bir işaretçi aksi halde); Orijinal kod görüntüsü bu dönüşüm operatörünün sonucudur. C++ 11'de dönüşüm artık mevcut değildir; yerine, boolean olmayan bağlamlarda gizemli dönüşümler getirmeden aynı amaca hizmet eden "açık operatör bool()" ile değiştirilmiştir. –

cevap

8

Metin dosyasını yazdırmak için bu cout << infile1.rdbuf(); kullanın, çünkü şimdi bir dosyaya bir işaretçi yazdırıyorsunuz.

DÜZENLEME: Eğer bu sizin için işe yaramadıysa, buna en yakın olan karakter karakter karakterini okumak olacaktır. Orada dizeleri kullanılarak etrafında başka yolları vardır, ancak bu kod sadece yeterli olacaktır:

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

Bu dosya okumak iyi ise karakter kodunu okur ve anında (UNICODE bazı değişiklikler gerekebilir) char dönüştürür ve yazdırır.

+0

Bu ayrıca bir işaretçi basmalı, bu kez işaretçi infile1'in arabellek nesnesine. Bu kodu deneyin: cout.rdbuf (infile1.rdbuf()); – Michael

+0

'cout << infile1.rdbuf()' sadece iyi çalışıyor, çünkü kim bilir :) – FrogTheFrog

+0

Haklısın, sadece test ettim, iyi çalışıyor. – Michael

İlgili konular