试图分割wchar或其他函数以获得正在运行的应用程序的文件名



我在这里搜索了很多,并尝试了几个例子,但仍然不能解决我的小问题。我需要从路径中提取文件名"test.exe"。有人有可行的主意吗?其他选项是通过另一个函数获得文件名?

提前感谢!

WCHAR fileName[255];
GetModuleFileName(NULL, fileName, 255);   // fileName = TestFoldertest.exe

PathFindFileName():

#include <windows.h>
#include <shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")
WCHAR fullPath[MAX_PATH];
GetModuleFileName(NULL, fullPath, MAX_PATH);
LPWSTR fileName = PathFindFileName(fullPath);

使用WinApi

#include <iostream>
#include <string>
#include <windows.h>
std::string GetExecutableName()
{
    std::string path = std::string(MAX_PATH, 0);
    if( !GetModuleFileNameA(nullptr, &path[0], MAX_PATH ) )
    {
        throw std::runtime_error(u8"Error at get executable name."); 
    }
    size_t pos=path.find_last_of('/');
    if(pos == std::string::npos)
    {
        pos = path.find_last_of('\');
    }
    return path.substr(pos+1);
}
int main()
{
    std::cout<< GetExecutableName() << std::endl;
    return 0;
}

使用主参数

First - arg[0]包含可执行文件的完整文件名。

#include <iostream>
#include <string>
std::string GetExecutableName(const std::string& exe)
{
    size_t pos=exe.find_last_of('/');
    if(pos == std::string::npos)
    {
        pos =exe.find_last_of('\');
    }
    return exe.substr(pos+1);
}
int main(int argc,char ** args) {
    std::cout << GetExecutableName(args[0])<< std::endl;
}

相关内容

  • 没有找到相关文章

最新更新