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

C++开发:实现Visual Studio自动识别文件名版本号并动态输出

解决方案:从文件名自动提取主名称和版本号

步骤1:获取当前程序的完整文件名

在Windows平台下,用GetModuleFileName函数可以拿到当前EXE的完整路径,之后我们只需要提取最后的文件名部分。

步骤2:解析文件名提取主名称和版本号

文件名格式是主名称[版本号].exe,我们可以通过字符串操作拆分:

  • 找到[的位置,前面的内容就是主名称
  • 找到]的位置,[和]之间的内容就是版本号

完整代码示例

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

int main() {
    char path[MAX_PATH];
    // 获取当前程序的完整路径
    GetModuleFileName(NULL, path, MAX_PATH);
    // 从路径中提取文件名(比如从"C:\xxx\TestFile[1.1.0].exe"得到"TestFile[1.1.0].exe")
    std::string fileName = path;
    size_t lastSlash = fileName.find_last_of("\\/");
    if (lastSlash != std::string::npos) {
        fileName = fileName.substr(lastSlash + 1);
    }

    // 提取主名称和版本号
    size_t bracketStart = fileName.find('[');
    size_t bracketEnd = fileName.find(']');
    if (bracketStart != std::string::npos && bracketEnd != std::string::npos && bracketStart < bracketEnd) {
        std::string mainName = fileName.substr(0, bracketStart);
        std::string version = fileName.substr(bracketStart + 1, bracketEnd - bracketStart - 1);
        // 输出目标格式内容
        std::cout << mainName << "[" << version << "]" << std::endl;
    } else {
        // 文件名格式不符合预期时,输出去掉.exe后缀的文件名
        size_t dotPos = fileName.find('.');
        if (dotPos != std::string::npos) {
            std::cout << fileName.substr(0, dotPos) << std::endl;
        } else {
            std::cout << fileName << std::endl;
        }
    }

    return 0;
}

代码说明

  • GetModuleFileName:Windows平台API,用于获取当前进程的可执行文件路径,需要引入<windows.h>头文件
  • 字符串操作:通过find_last_of定位路径最后一个斜杠,提取纯文件名;通过find定位[和]的位置,拆分出主名称与版本号
  • 容错处理:如果文件名格式不符合预期(比如没有[]),会自动输出去掉.exe后缀的文件名,避免程序异常

注意事项

  • 该代码仅适用于Windows平台,若需跨平台需调整获取文件名的逻辑
  • 确保文件名严格遵循主名称[版本号].exe的格式,否则会触发容错输出逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 07:16:28