C++如何逐字打印一个.txt文件?

5
我有一个文件,想在屏幕上打印出来,但是它只返回"0x28fe88",而这个文件实际上是13列,几百行。
#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;
}

我本来不想公布完整的代码,但我希望它足够简短,不会引起争议。


你没有打印文件的内容,而是打印了 ifstream 对象。 - Jesus Ramos
2
cout << infile1;并不会将文件内容打印到标准输出(stdout)。它实际上是在打印对象地址。 - greatwolf
原始代码将流对象插入到流中。这是因为在C++11之前,流类(技术上,基类basic_ios)具有转换为void*的功能,该功能指示流是否处于良好状态(如果不是,则返回空指针,否则返回非空指针);原始代码显示的是此转换运算符的结果。在C++11中,该转换不再存在;它已被替换为explicit operator bool(),其在非布尔上下文中不会引入神秘的转换,但具有相同的目的。 - Pete Becker
1个回答

10

要只打印文本文件,请使用此代码cout << infile1.rdbuf();,因为现在您正在打印文件指针。

编辑: 如果这对您没有起作用,最接近它的方法是逐个字符读取文件。使用字符串有其他方法解决,但这段代码也可以胜任:

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

它在文件可读的情况下读取字符代码,并立即将其转换为char(对于UNICODE可能需要进行一些修改),然后将其打印出来。


这个代码还应该打印出一个指针,这次是指向infile1的缓冲区对象的指针。试一下这段代码:cout.rdbuf(infile1.rdbuf()); - Michael
cout << infile1.rdbuf() 运行得很好,因为谁知道呢 :) - FrogTheFrog
我用我所拥有的来补充了这个,但它仍然打印先前声明的输出。再次强调,我只想按原样打印文件。 - Tilt-Shifted

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接