如何获得程序路径

时间:2010-12-23 09:30:01

标签: c++ gtk

  

可能重复:
  how to find the location of the executable in C

我正在使用GTK +在C ++中编写一个多平台应用程序,我遇到了问题。我必须得到程序路径。例如,当节目在/home/user/program(或C:\Users\user\program.exe)时,我有/home/user/(或C:\Users\user\)。

可以以及如何做到这一点?

3 个答案:

答案 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;

你应该看看这个问题..

How do I get the directory that a program is running from?

答案 2 :(得分:3)

argv[0]包含带路径的程序名称。我在这里错过了什么吗?