你可能想試試這個:有你的程序調用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