当前位置: 首页 > news >正文

获取文件版本(C++源码)

1、概述

有些场景要读取文件版本信息,详见代码

2、代码

2.1、调用示例

    // 调用示例// 获取文件版本号FileVersion fileVersion;std::wstring path = L"C:\\Program Files\\Tencent\\Weixin\\4.1.1.19\\Weixin.dll";PathUtil::GetFileVersion(path, fileVersion);std::wcout << fileVersion.toString() << std::endl;

2.2、源码

头文件

#ifndef Path_Util_h_
#define Path_Util_h_ 1
#include <string>// 定义版本信息结构体
struct FileVersion
{int majorVersion = 0;int minorVersion = 0;int buildVersion = 0;int revisionVersion = 0;std::wstring toString() const;
};class PathUtil
{
public:static bool GetFileVersion(const std::wstring& path, FileVersion& fileVersion);
};#endif

源文件

#include "PathUtil.h"
#include <Windows.h>
#include <vector>#pragma comment(lib, "Version.lib")bool PathUtil::GetFileVersion(const std::wstring& path, FileVersion& fileVersion)
{if (path.empty()){return false;}DWORD dwSize = 0;dwSize = ::GetFileVersionInfoSize(path.c_str(), nullptr);if (dwSize == 0){return false;}std::vector<BYTE> buffer(dwSize);if (!::GetFileVersionInfo(path.c_str(), 0, dwSize, buffer.data())){return false;}VS_FIXEDFILEINFO* pFixedInfo = nullptr;UINT cbFixedInfo = 0;if (!::VerQueryValue(buffer.data(), L"\\", (LPVOID*)&pFixedInfo, &cbFixedInfo) || pFixedInfo == nullptr || cbFixedInfo == 0){return false;}// 0xfeef04bd 是Windows版本资源(Version Resource)中的一个固定签名值// 用于标识VS_FIXEDFILEINFO结构体的有效性if (pFixedInfo->dwSignature != 0xfeef04bd) {return false;}fileVersion.majorVersion = HIWORD(pFixedInfo->dwFileVersionMS);fileVersion.minorVersion = LOWORD(pFixedInfo->dwFileVersionMS);fileVersion.buildVersion = HIWORD(pFixedInfo->dwFileVersionLS);fileVersion.revisionVersion = LOWORD(pFixedInfo->dwFileVersionLS);return true;
}std::wstring FileVersion::toString() const
{wchar_t buf[64] = { 0 };swprintf_s(buf, _countof(buf), L"%d.%d.%d.%d", majorVersion, minorVersion, buildVersion, revisionVersion);return buf;
}
http://www.dtcms.com/a/516475.html

相关文章:

  • 济南网站建设鲁icp备附近展览制作工厂
  • 在Windows WSL2中安装Ubuntu和Docker的完整指南
  • Ubuntu 22 .04安装CUDA, cuDNN, TensorRT
  • Linux编辑神器——vim工具的使用
  • UPS-不间断电源系统
  • AMDGPU/KFD IV(Interrupt Vector)信息结构及实现
  • 网站开发公司计划书如何做英文网站的外链
  • 彬县网站建设it外包前景
  • 网站集约化做暧暧国外网站
  • 基于python的电子商务管理系统
  • Git Remote 实现双向仓库同步教程(适合跨公司协作)
  • 检测网站开发语言工具wordpress免回复
  • 【python】Pillow 快速入门
  • [特殊字符] [特殊字符][特殊字符]这样的 ​Emoji 表情符号​ 是怎么来的、怎么显示出来的,以及它们到底是怎么工作的
  • Salesforce Connected App 创建指南
  • 做的比较好的国外网站一级页面布局分析海外短视频服务器
  • 42.接雨水
  • 衡水网站建设地方网页界面设计案例分析
  • Process Monitor 学习笔记(5.24):工具栏参考与高效快捷键指南
  • UE5 材质-15:车漆-不透明-透明图层,FBX格式的介绍,如何导入外部模型FBX汽车,下载与使用官方的汽车材质 automotive materials,
  • qt实用学习案例:数据库设计+图表显示+model-view模式+样式表定制
  • 脉冲神经网络最新文献合集-XX
  • wordpress做学校网站thinkphp 网站源码
  • 数据库(6)
  • 【性能优化】--perfetto分析思路
  • **发散创新:探索生物神经网络与编程语言的交融**随着生物神经网络研
  • 平台网站开发公司广州安全教育平台登陆
  • 第1章:初识Linux系统——第8节:查看/修改权限控制和ACL
  • Rust所有权机制在Web服务开发中的避坑指南
  • 成都网站开发费用企业网站建设任务书