【发布时间】:2017-03-13 14:57:38
【问题描述】:
我在 64 位 Windows 7 机器上用 Visual Studio C++ 2012 编写了一个非常简单的程序;它所做的只是使用 std::ifstream 打开一个文件并打印其内容。
int main() {
std::ifstream fileStream("Test.txt");
if (!fileStream.is_open()) {
cerr<<"Error: "<<strerror(errno)<<endl;
} else {
std::string testString;
getline(fileStream, testString);
cout<<testString<<endl;
}
}
足够简单,而且效果很好。当此代码运行时,任务栏上会出现一个图标,表示从此代码生成的可执行文件。如果您要右键单击该图标并运行生成的可执行文件的另一个实例,ifstream 将失败,说明该文件不存在。当然除了它,它在正常执行下已经正确执行了。
如果以上还不够奇怪,那么我尝试将可执行文件固定到任务栏并重复实验。 它奏效了。无论您从任务栏创建多少个实例,如果它被固定,它都会起作用。
使用完整路径而不是相对路径也可以,但是我正在开发一个更大的项目来存储相对于可执行文件的资源;当文件已经存在时,我不想确定可执行文件的路径。
我确实调用了 GetModuleFileName 来查找执行路径,并且它似乎在所有执行中都是相同的。
所以我的问题是,我到底错过了什么?如果以这种方式运行,为什么我找不到就在我的可执行文件旁边的那些文件?
【问题讨论】:
-
可能工作目录不同?
-
工作目录很可能发生了变化。如果您使用绝对文件路径而不是相对路径会发生什么?
-
GetModuleFileName为可执行路径,与当前工作目录基本无关。 -
@NathanOliver 正如我所说,它有效。
-
@AlgirdasPreidžius 为什么固定后会改变?