如何在C ++中读取文件?

时间:2019-11-09 07:30:54

标签: c++ ifstream

请告诉我我做错了什么以及如何解决。 .txt文件与c ++文件位于同一目录中。

string line;
ifstream printCandidates ("printCandidates.txt");
if(printCandidates.is_open())
{
    while(getline(printCandidates, line))
    {
        cout << line << "\n";
    }
} else
{
    cout << "Error!\n";
}
printCandidates.close();

1 个答案:

答案 0 :(得分:1)

由于使用的文件名没有绝对路径,因此在执行该程序时,将在当前目录中的任何位置创建该文件。该目录由调用过程确定。这与C ++文件的位置完全无关(实际上,如果要运送已编译的代码,则C ++文件位于完全不同的计算机上,甚至可能无法从运行该程序的计算机进行访问)。实际上,甚至不一定是您的程序在哪里。

避免这种情况的方法是使用文件的绝对路径。最简单的方法是将文件存储在固定的绝对路径中,然后将该绝对路径传递给ifstream构造函数。您可能不想为此使用源目录,而是指示构建系统将文件复制到固定位置并在代码中使用该位置。该如何做取决于您的构建系统。

您还可以考虑在构建系统中配置路径,并在编译器调用时通过宏将其传递给C ++代码。大多数编译器都可以通过命令行选项(如

)来允许此操作
c++ -DCANDIDATE_PATHNAME=\"/path/to/printCandidates.txt\" yourcode.cpp

然后在您的代码中编写

ifstream printCandidates(CANDIDATE_PATHNAME);

但是细节取决于您的编译器和构建系统。