我正在使用GTK +在C ++中编写一个多平台应用程序,我遇到了问题。我必须得到程序路径。例如,当节目在/home/user/program
(或C:\Users\user\program.exe
)时,我有/home/user/
(或C:\Users\user\
)。
可以以及如何做到这一点?
答案 0 :(得分:6)
对于Win32 / MFC c ++程序:
char myPath[_MAX_PATH+1];
GetModuleFileName(NULL,myPath,_MAX_PATH);
同时观察评论 http://msdn.microsoft.com/en-us/library/windows/desktop/ms683156%28v=vs.85%29.aspx,
实质上:WinMain不包含lpCmdLine中的程序名,main(),wmain()和_tmain()应该在argv [0]中包含它,但是:
注意:命令行中的可执行文件的名称 操作系统提供的进程不一定相同 在调用进程给出的命令行中 CreateProcess函数。操作系统可以完全预先填充 没有完全提供的可执行文件名的限定路径 合格的道路。
答案 1 :(得分:3)
在Windows上..
#include <stdio.h> /* defines FILENAME_MAX */
#ifdef WINDOWS
#include <direct.h>
#define GetCurrentDir _getcwd
#else
#include <unistd.h>
#define GetCurrentDir getcwd
#endif
char cCurrentPath[FILENAME_MAX];
if (!GetCurrentDir(cCurrentPath, sizeof(cCurrentPath)))
{
return errno;
}
cCurrentPath[sizeof(cCurrentPath) - 1] = '/0'; /* not really required */
printf ("The current working directory is %s", cCurrentPath);
Linux的
char szTmp[32];
sprintf(szTmp, "/proc/%d/exe", getpid());
int bytes = MIN(readlink(szTmp, pBuf, len), len - 1);
if(bytes >= 0)
pBuf[bytes] = '\0';
return bytes;
你应该看看这个问题..
答案 2 :(得分:3)
argv[0]
包含带路径的程序名称。我在这里错过了什么吗?