我有以下代码(简化)
int main()
{
ifstream myFile("input.txt");
if(myFile.is_open())
cout<<"test";
}
但是myFile.is_open()
返回false;
为什么?
我正在使用eclipse并且input.txt文件位于带有.cpp文件的src文件夹中...
谢谢!
答案 0 :(得分:7)
默认情况下,每个可执行文件都是从项目目录中运行。所以对于这样的树:
project
|- src
| |- a.cpp
| |- b.cpp
| |- foo.txt
|
|- Debug
| |- a.exe
|
|- foo2.txt
您应使用src/foo.txt
或foo2.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目录。我不知道默认是什么。