在当前文件夹C ++中获取可执行文件的路径

时间:2016-12-01 19:10:12

标签: c++ winapi path

我正在尝试将exe文件的路径放在此程序所在的同一文件夹中。但我无法弄清楚该怎么做,我做了类似的事情,但它只获得了当前的程序路径,我不知道如何替换我的程序和我希望获得路径的程序之间的文件名。

所以你能帮助我在这个程序所在的同一个文件夹中找到一个exe的路径(我知道那个exe的名字)...

    char fullp[MAX_PATH];
    char selfp[MAX_PATH] = "..//myprogram.exe"; 
    char otherprogram[MAX_PATH] = "//test.exe";

    DWORD szPath;
    szPath = GetModuleFileName(NULL, selfp, sizeof(selfp));

2 个答案:

答案 0 :(得分:0)

OP大部分都在那里。以下是如何完成其​​余部分的示例。

为了简化解决方案,我将尽可能远离char数组并使用std::string

#include <iostream>
#include <string>
#include <windows.h>

int main()
{
    char selfp[MAX_PATH];
    std::string otherprogram = "Failed to get path";

    DWORD szPath;
    szPath = GetModuleFileName(NULL, selfp, MAX_PATH);
    if (szPath != 0) // successfully got path of current program
    {
        // helper string to make life much, much easier
        std::string helper = selfp;
        //find last backslash in current program path
        size_t pos = helper.find_last_of( "\\" ); 

        if (pos != std::string::npos) // found last backslash
        {
            // remove everything after last backslash. This should remove 
            // the current program's name.
            otherprogram = helper.substr( 0, pos+1);
            // append new program name
            otherprogram += "test.exe";
        }
    }
    std::cout << otherprogram << std::endl;
}

答案 1 :(得分:0)

Win32 API有一大堆Path Handling functions可用。

例如,一旦您从GetModuleFileName()获得了调用进程的完整路径,就可以使用PathRemoveFileSpec()删除文件名,只留下文件夹路径:

char selfdir[MAX_PATH] = {0}; 
GetModuleFileNameA(NULL, selfdir, MAX_PATH);
PathRemoveFileSpecA(selfdir);

然后使用PathAppend()PathCombine()向该路径添加不同的文件名:

char otherprogram[MAX_PATH] = {0};
lstrcpyA(otherprogram, selfdir);
PathAppendA(otherprogram, "test.exe");

char otherprogram[MAX_PATH] = {0};
PathCombineA(otherprogram, selfdir, "test.exe");