【问题标题】:ifstream not reading file for no obvious reasonifstream 没有明显的原因不读取文件
【发布时间】:2025-12-02 10:00:02
【问题描述】:

我为我的班级编写了一个非常简单的程序,虽然它编译没有问题,但我在 cout 上没有得到任何输出。

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main() {

    ifstream fl("data.txt");    
    string s;

    for(int i=0;i<3;i++){
        fl>>s;
        cout<<s;
    }
    return 0;
}

data.txtmain.cpp 位于同一文件夹中。

【问题讨论】:

  • 文件是空的吗?尝试在末尾添加std::cout &lt;&lt; std::endl 以刷新输出。
  • 它“不明显”,因为你没有检查文件是否被打开。
  • 一般来说,当事情可能失败时,你应该假设它们确实失败了。
  • if(fl) { /* open succeeded */ } else { std::cerr &lt;&lt; std::strerror(errno); }

标签: c++ ifstream getline


【解决方案1】:

C++ 中没有规定文件应与包含读取它的代码的文件位于同一文件夹中。

几乎可以肯定该文件没有被打开,因为它不在正确的位置。您可以使用此代码进行测试

ifstream fl("data.txt"); 
if (!fl.is_open())
    cout << "failed to open file\n";

始终检查文件打开是否成功。

【讨论】:

    【解决方案2】:

    data.txtmain.cpp 位于同一文件夹中

    ...当您运行程序时,它不一定是您所在的目录。

    根据 IDE,您可能位于二进制目录、发布目录、调试目录或一百个不同位置中的任何一个:-)

    您通常只需执行以下操作之一即可找出位置:

    system("pwd")
    system("cd")
    system("cmd /c cd")
    

    在您的代码中,然后查看它的输出。我不确定cd 本身是否会起作用,因为它可能是一个内部cmd 命令。

    然后,您要么必须确保数据文件在 那个地方,要么使用能够正确找到它的路径名。即使在 IDE 中构建时,我也倾向于从命令行运行我的可执行文件,以确保我在正确的位置。

    【讨论】:

    • 感谢您的帮助。我之前尝试过使用文件路径,但没有用。事实证明这个问题非常愚蠢——我直接从 Windows 资源管理器复制了路径,并没有用“/”替换“\”字符。现在可以使用了。