c ++无法找到文件(我认为)

时间:2010-12-11 23:38:59

标签: c++ eclipse file eclipse-cdt

我有以下代码(简化)

int main()
{
    ifstream myFile("input.txt");
    if(myFile.is_open())
        cout<<"test";
}

但是myFile.is_open()返回false;

为什么?

我正在使用eclipse并且input.txt文件位于带有.cpp文件的src文件夹中...

谢谢!

5 个答案:

答案 0 :(得分:7)

默认情况下,每个可执行文件都是从项目目录中运行。所以对于这样的树:

project
 |- src
 |  |- a.cpp
 |  |- b.cpp
 |  |- foo.txt
 |
 |- Debug
 |  |- a.exe
 |
 |- foo2.txt

您应使用src/foo.txtfoo2.txt之类的路径。您的exe位于Debug目录中,但无论如何它都将从您项目的目录中运行。通过这种方式,每个构建配置的可执行文件都以相同的方式运行(来自同一个地方)。

您可以在运行配置(“运行”图标旁边的下拉菜单)下更改工作目录和参数。切换到“参数”选项卡,取消选中“使用默认值”并设置您想要的默认设置。

答案 1 :(得分:1)

检查Eclipse为您设置的工作目录。它可能是二进制的。尝试将input.txt文件放在与代码中的二进制Eclipse编译目录相同的目录中,然后运行该应用程序。

要查找项目的工作目录设置,请在项目的设置对话框中查找。

也就是说,以独立于工作目录的方式编写代码可能是个好主意。您可以在预处理器常量字符串中设置二进制文件的安装目录,并将安装脚本(或配置脚本)设置为#define到正确的目录。或者,如果这不是一个选项,那么您可以在运行时获取目录值。

答案 2 :(得分:1)

如果您没有指定完整路径,程序将在当前目录中搜索,可能在您的情况下是构建可执行文件的目录 编辑:< / em> 事实证明,默认情况下它是项目目录(感谢@Kos)

您可以在该目录中移动input.txt,指定完整路径(或正确的相对路径)或指示您的IDE使用不同的当前目录启动可执行文件(我不知道是否可以使用Eclipse ,我建议这个,因为VS可以做到这一点。)

顺便说一下,一般来说,你应该避免对源代码中的路径进行硬编码。

答案 3 :(得分:1)

您的source文件夹中有input.txt,但应用程序是从Debug文件夹执行的;来自'来源',它位于..\Debug。只需将文本文件放在那里就可以了。

答案 4 :(得分:0)

您可能必须将eclipse的工作目录设置为src目录。我不知道默认是什么。