我正在尝试将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));
答案 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");