当前位置:首页 > c++ > 正文内容

c++获取指定文件的版本号

xuwenyan8个月前 (02-07)c++384
#include <iostream>
#include <Windows.h>
#include <tchar.h>
#include <string>
#include <vector>
#include <sstream>

#pragma comment(lib, "Version.lib")

bool GetFileVersion(const std::wstring& file_path, std::wstring* version)
{
    DWORD version_info_handle_ = NULL;
    DWORD version_info_size = ::GetFileVersionInfoSize(file_path.c_str(), &version_info_handle_);
    if (version_info_size == 0)
        return false;

    std::vector<byte> buffer;
    buffer.resize(static_cast<size_t>(version_info_size));
    if (!::GetFileVersionInfo(file_path.c_str(), 0, version_info_size, &buffer[0]))
        return false;

    UINT info_size = 0;
    VS_FIXEDFILEINFO* file_info = nullptr;
    if (!::VerQueryValue(&buffer[0], _T("\\"), (void**)&file_info, &info_size))
        return false;

    std::wstringstream version_stream;
    version_stream << HIWORD(file_info->dwFileVersionMS);
    version_stream << _T(".");
    version_stream << LOWORD(file_info->dwFileVersionMS);
    version_stream << _T(".");
    version_stream << HIWORD(file_info->dwFileVersionLS);
    version_stream << _T(".");
    version_stream << LOWORD(file_info->dwFileVersionLS);
    version->assign(version_stream.str());

    return true;
}

int main(int argc, char** argv)
{
    std::wstring version;
    bool ret = GetFileVersion(_T("test.exe"), &version);
    return 0;
}


    文章作者:xuwenyan
    版权声明:本文为本站原创文章,转载请注明出处,非常感谢,如版权漏申明或您觉得任何有异议的地方欢迎与本站取得联系。

    扫描二维码推送至手机访问。

    版权声明:本文由艺文笔记发布,如需转载请注明出处。

    本文链接:https://www.xuwenyan.com/archives/3010

    标签: C++编程
    分享给朋友:

    “c++获取指定文件的版本号” 的相关文章

    使用GDI、MFC_GDI、GDI+绘制数组RGBA序列

    使用GDI、MFC_GDI、GDI+绘制数组RGBA序列

    学习ffmpeg时遇到一个问题,ffmpeg解码出RGB颜色后怎么绘制到屏幕上,于是将GDI、MFC_GDI、GDI+等方式都记录一下 1:注意按windows的要求,R、G、B、A顺序要调整为B、G、R、A 。 2:GDI不支持透明通道A,透明通道A的值读进去以后没有作用。想要支持透...

    VC的ATL工程向导同时生成一个PS工程是做什么的?可以不要吗?

    VC的ATL工程向导同时生成一个PS工程是做什么的?可以不要吗?

    例如,我用VC2015的工程向导新建一个ATL的工程名字叫myAtl,那么VC会同时给我生成一个叫做myAtlPS的工程。这个myAtlPS工程是做什么的?什么情况下可以不需要它?什么情况下它又是必须存在的? PS工程是什么?可以不要吗? 这个PS工程叫做代理与存根(proxy&nbs...

    解决程序在xp系统总是莫名奇妙的崩溃问题(/Zc:threadSafeInit- )

    解决程序在xp系统总是莫名奇妙的崩溃问题(/Zc:threadSafeInit- )

    现象:程序在xp系统上面总是莫名其妙的崩溃,检查代码看不出任何问题,感觉代码都很好。即使你远程调试,找到了崩溃的点,当你注释了崩溃点之后,还是会崩溃到别的地方。当你遇到了这种情况的时候,不妨参照一下下面的方法看看,说不定可以解决问题。如何解决?将崩溃程序相关的所有工程代码全部关闭全局变量的线程安全检...

    static_assert和assert有什么区别?

    static_assert和assert有什么区别?

    static_assert和assert都是断言,都可用于判断一个条件是否成立,并且在条件不成立时及时给出错误提示。那它们用什么不同和需要注意的地方呢? 1:static_assert在编译期执行,而assert在运行期执行。2:static_assert无论在debug模式还是relea...

    c++为什么不能在构造函数里调用虚函数?

    c++为什么不能在构造函数里调用虚函数?

    c++为什么不能在构造函数里调用虚函数? c++的构造顺序先构造父类,然后构造子类,析构顺序相反。 如果在构造函数调用虚函数,例如:ClassB继承于ClassA,如果在ClassA的构造函数里调用虚函数,此时因为ClassB并没有构造,所以ClassB的成员都没有初始化,如果编译执行...

    堆和栈有什么区别?哪个比较快?

    堆和栈有什么区别?哪个比较快?

    我们都知道,windows内存区域无外乎堆、栈、静态区、常量区,下面主要说一说堆和栈。 首先我们要注意一个容易混淆的点,我们经常会听人把堆栈连起来说,通常堆栈指的是栈,而不是堆。 什么是堆? 需要程序员自己申请,并指明大小。 什么是栈? 由编译器自动分配释放 ,存放为...