c ++:如何询问文件名并打开它?

时间:2014-02-09 12:48:56

标签: c++ string ifstream

我在这里苦苦挣扎,我的代码与此类似:

#include <iostream>
#include <string>
#include <ifstream>

using namespace std;

int main() {
    string filename;
    cout << "Enter the filename: ";
    cin >> filename;
    ifstream myfile(filename);

    //code that does stuff, eg:
    while (myfile >> thing) {
        mydata[i] = thing;
        i = i + 1; //etc, this *isn't* an issue
    }
}

主要的问题是它似乎没有用g ++编译,但我确信我之前有这个工作。我在某处看到string filename;位已被破坏,但除了将其存储为string之外,我不知道如何申请文件名。有人可以帮忙吗?我也应该使用<fstream><ifstream>我真的没有看到差异。谢谢。

2 个答案:

答案 0 :(得分:4)

如果您没有C ++ 11支持,则需要将const char*传递给ifstream构造函数。你可以这样做:

ifstream myfile(filename.c_str());

答案 1 :(得分:4)

您需要克服的第一个错误是this one

main.cpp:3:20: fatal error: ifstream: No such file or directory
 #include <ifstream>
                    ^
compilation terminated.

实际上,这个标题不存在。你可能意味着fstream

更正后,the crux of your issue is

main.cpp: In function 'int main()':
main.cpp:11:29: error: no matching function for call to 'std::basic_ifstream<char>::basic_ifstream(std::string&)'
     ifstream myfile(filename);

这是因为fstream构造函数在C ++ 98和C ++ 03中没有采用字符串参数。这是一种传统的疏忽,在C ++ 11中修复。

您有两种选择:

  • 切换到C ++ 11(demo
  • 改为传递C风格的字符串(demo

    ifstream myfile(filename.c_str());
    

在上面的两个例子中,我不得不删除整个while循环,因为它引用了程序中未声明的符号。报告问题时,请更加谨慎,并提供仅包含 您要解决的问题的testcase