如何一次阅读文本文件?

时间:2014-05-04 11:24:24

标签: c++ file-io

我正在尝试读取文本文件,以便显示存储在文件中的信息。这是我写的代码:

#include <iostream>  
#include <fstream>
using namespace std;

int main() 
{
    ifstream ifile;
    ifile.open("List Of Hospitals.txt",ios::in); 
    while(!ifile.eof())
    {
        cout<<ifile;
    }

    ifile.close();
    return 0;
}

但是我得到了0x28fe74的输出,这个程序永远不会终止。 我应该在此代码中进行哪些更改,以便我能够一次读取整个文件或一次读取一行。 (均可接受)

4 个答案:

答案 0 :(得分:0)

您要做的是输出while流对象实例,但没有输出重载将流作为输入。

但如果你看到例如this std::ostream::operator<< reference你会看到一个带有std::basic_streambuf指针的重载。这个重载的运算符将从std::basic_streambuf输出全部。您可以使用rdbuf函数获取流std::basic_streambuf指针。

可以像

一样使用
std::ifstream ifile;
ifile.open("List Of Hospitals.txt");
if (ifile)
    std::cout << ifile.rdbuf();

另请注意,不建议使用循环。这是因为在之后尝试从文件末尾的读取之后才设置eofbit标志。所以像你这样的循环会迭代一次到多次。

答案 1 :(得分:0)

尝试使用getline。你没有用你的版本增加文件指针,所以它只会打印变量并永远继续。

#include <iostream>  
#include <fstream>
#include <string>
using namespace std;

int main() 
{
string line;
ifstream ifile;
ifile.open("List Of Hospitals.txt",ios::in); 
if (ifile.is_open())
  {
    // getline will pull a line at a time here.
    while ( getline (ifile,line) )
    {
      cout << line << '\n';
    }
    ifile.close();
  }

    return 0;
}

答案 2 :(得分:0)

将文件复制到标准输出流:

ifstream in;
in.open( "List Of Hospitals.txt",ios::in);
std::copy( std::istreambuf_iterator<char>(in), std::istreambuf_iterator<char>(),
           std::ostream_iterator<char>( std::cout, ","));

答案 3 :(得分:0)

尝试这样的代码: 逐字阅读。

#include "stdafx.h"
#include <iostream>  
#include <fstream>
using namespace std;

int main() 
{

ifstream ifile("List Of Hospitals.txt",ios::in);
char temp[20];   // temp[Maximum length of your word]
while(ifile >>temp) {
    cout << temp << " " ;
}
ifile.close();
    return 0;
}