You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从GetModuleFileName返回的路径中提取仅含文件名的模块名

我使用GetModuleFileName函数获取到了模块的完整路径与名称,例如返回的路径为C:\Users\user\Desktop\file.exe,请问如何仅提取其中的file.exe模块名,去掉前面的完整路径部分?

提取方案

方案1:Windows原生API实现(最便捷)

Windows的Shell库提供了现成的PathFindFileName API,可以直接从完整路径中提取文件名,无需手动处理字符串:

  • 依赖项:需要引入头文件shlwapi.h,链接shlwapi.lib库
  • 代码示例:
#include <windows.h>
#include <shlwapi.h>
#pragma comment(lib, "shlwapi.lib")

int main() {
    TCHAR szFullPath[MAX_PATH] = {0};
    // 获取当前模块的完整路径
    GetModuleFileName(NULL, szFullPath, MAX_PATH);
    // 直接提取文件名
    LPTSTR pszFileName = PathFindFileName(szFullPath);
    // pszFileName 此时指向的就是 file.exe 的起始地址
    return 0;
}

该函数自动兼容ANSI和Unicode编码,不需要额外处理字符集问题。

方案2:无依赖手动实现

如果你不想引入额外的Shell库依赖,可以手动查找路径中最后一个反斜杠的位置,向后偏移一位就是文件名的起始位置:

  • 代码示例:
#include <windows.h>
#include <tchar.h>

LPTSTR ExtractFileName(LPTSTR szFullPath) {
    // 查找最后一个反斜杠的位置
    LPTSTR pLastSlash = _tcsrchr(szFullPath, _T('\\'));
    // 没有找到反斜杠说明传入的本身就是文件名
    return pLastSlash ? (pLastSlash + 1) : szFullPath;
}

int main() {
    TCHAR szFullPath[MAX_PATH] = {0};
    GetModuleFileName(NULL, szFullPath, MAX_PATH);
    LPTSTR pszFileName = ExtractFileName(szFullPath);
    return 0;
}

GetModuleFileName返回的路径格式规范,不会出现末尾带反斜杠的情况,以上逻辑可以直接使用。

其他语言快速实现

如果是上层语言调用GetModuleFileName后需要提取文件名,可以直接使用语言自带的路径处理工具:

  • C#:使用System.IO.Path.GetFileName()方法
string fullPath = @"C:\Users\user\Desktop\file.exe";
string fileName = Path.GetFileName(fullPath);
  • Python:使用os.path.basename()方法
import os
full_path = r"C:\Users\user\Desktop\file.exe"
file_name = os.path.basename(full_path)

内容的提问来源于stack exchange,提问作者JeduMiSePalacinke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 19:33:00