1

我正在尝试用 C++ 打开一个文件。

我的文件位于 /home/me/myproject/mydir/myfile.txt

我在我的文件系统中检查了该文件存在并且不为空。

我用 getcwd() 检查了我在 /home/me/myproject/

因此,我尝试使用以下命令打开它:

string myfilename;
ifstream myfile;
myfilename = "./mydir∕myfile.txt"; 
myfile.open(myfilename.c_str(), ios::in);
if (myfile.fail()) {
    // I always end up here.
}

我真的不明白为什么 myfile.fail() 总是返回 true。知道为什么会这样,或者我可以执行哪些调试测试来理解它为什么会这样?


我找到了问题所在,谢谢大家。我正在使用远程控制软件,它显然认为“/”(正斜杠)与“/”(除号)不同。我仍然有一个问题困扰着我,但我会在另一篇文章中提出。errno 和 strerror() 帮助我理解出了什么问题。这些错误很难找到,很抱歉它与 c++ 代码没有严格的关系。

(注意:我在这里回答是因为显然我无法回答自己的问题)。

4

1 回答 1

0

当您使用相对路径打开文件时,它是从执行目录计算的,这取决于您启动程序的方式。

假设你的程序位于~/path/to/my/program,如果你的当前目录是 ~ 当你启动它(所以你的命令是./path/to/my/program/my_program),执行目录是 ~。如果您的当前目录是 ~/path/to/my(并且您使用./program/my_program命令启动),则执行目录是 ~/path/to/my。您可以使用该功能确定您当前的工作目录getcwd()

为避免此类问题,一个好的经验法则是始终在应用程序中使用绝对路径。

此外,您应该使用其中一个errnostrerror在您的if (myfile.fail()) {...}块中以获取有关该错误的更多信息。

于 2012-04-23T12:29:37.460 回答