c ++:逐行读取文件

时间:2012-06-09 16:40:26

标签: c++ file-io filepath

我想知道是否有一种C ++方式打开文件并逐行读取输入。

我遇到了以下代码来完成任务:

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

int main () {
  ifstream myfile;
  myfile.open ("example.txt");
  return 0;
}

我鼓励不要使用任何C函数或命令。

问题是,我的“example.txt”是一个字符串的形式,并且使用str.c_str()是一个C函数,所以我想我有两种方法可以解决这个问题。

还有另一种方法可以逐行读取文件中的输入吗?也许使用一些接受字符串作为文件路径参数的东西?有没有C ++的做事方式? :)

或者,是否有另一种方法将字符串转换为const char *,这是myfile.open()函数需要的?

非常感谢提前!

编辑:我缺乏实​​践和研究使我认为c_str()是一个C函数,而事实并非如此。我很抱歉。既然不是我找到了答案。

3 个答案:

答案 0 :(得分:5)

C ++ 11的fstream构造函数接受string。在大多数情况下,您希望使用fstream的构造函数而不是.open() - 您可以保存一行和一个函数调用。

要逐行阅读文件,您应该使用std::getline()

另请注意,string::c_str()仍然是C ++函数,而不是C 1,以及fstream的构造函数const char *。大多数(如果不是全部,我不是100%肯定)C标准库函数也包含在C ++标准中。

答案 1 :(得分:0)

由于关于str.c_str()的问题已经得到解答,我只想补充一点逐行获取输入。例如,您想要每行输入2个输入,提取它们并将其放入向量中。

fstream fs(filename.c_str(), ios_base::in);
string line;
stringstream ss;
int a,b;
vector<int> d; 
int numlines;
int i;
for (i = 0; getline(fs, line); i++) {
  for (ss.str(line); ss >> a >> b; d.push_back(a), d.push_back(b)) {}
  ss.clear();
}
numlines = i;

希望您能够使用getline()fstream()

答案 2 :(得分:-3)

它看起来非常相似。您需要一个ifstream而不是ofstream,您需要>>运算符,并假设您的文件有多行,您就可以了需要一个循环和ifstream::feof()函数。