你可能想试试这个:有你的程序调用GetCurrentDirectory()
,并将结果输出到某个地方,你可以确认程序的当前目录是真正的你认为它是。如果您在调试器下运行,您可以使用OutputDebugString()
,否则使用MessageBox()
。
当我需要确定打开一个共存文件时,我打电话GetModuleFileName(NULL, szExeFqn, sizeof(szExeFqn))
获取EXE文件的FQN,剥离EXE文件名并添加我需要的文件的名称。这样,我就不会做任何可能是错误的假设 - 毕竟,将快捷方式设置为与包含EXE文件的目录不同的程序的默认目录很简单。此外,如果通过输入程序的完整路径从命令行运行程序,那么程序的当前目录就是您在运行它时所在的目录,而不是找到EXE的目录。这也是如果你的程序是通过搜索PATH
环境变量(是的,它仍然存在于Windows中)找到的。
下面是我用了十多年来做了你所描述的事情的一个例子:
char szHelpFileName[_MAX_FNAME];
char *cp;
GetModuleFileName(NULL, szHelpFileName, sizeof(szHelpFileName));
cp = strrchr(szHelpFileName, '\\');
if(cp)
{
cp++; // Point to the char just following the final slash.
}
else
{ // No backslash, is there a colon?
cp = strrchr(szHelpFileName, ':');
if(cp)
{
cp++; // Point to the char just following the colon.
}
else
{ // I give up. I'll have no path information.
cp = szHelpFileName;
}
}
strcpy(cp, "program.hlp");
最终结果是与EXE位于同一位置的帮助文件的名称。除非帮助文件丢失(或者其权限已被某种方式掠过),否则这种方式始终有效。我从来没有遵循评论“我放弃”的“偏执狂”路线。
发布您的代码。 – 2013-03-05 12:55:42
放置exe文件无关紧要。什么是当前目录? – 2013-03-05 12:58:09
在VS2010中,它被设置为项目目录,但我在另一台计算机上运行此exe文件,并且该文本文件位于同一目录中。 – 2013-03-05 13:02:08