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
相关产品推荐
相关产品推荐

