doumou8527 2017-08-23 15:35
浏览 179
已采纳

如何在Windows中使用golang获取文件描述(产品名称,原始文件名等)?

Fileinfo in golang gives Name, time modified, size, etc. I need to get particular File's description(eg: Product name, Original filname, etc.) using golang in windows.

  • 写回答

1条回答 默认 最新

  • doupian9798 2017-09-14 14:43
    关注

    You can use the w32 library for Win32 API calls from Go. No CGo needed.

    Here is an example of how you can retrieve all file information through GetFileVersionInfo and VerQueryValue:

    package main
    
    import (
        "fmt"
        "github.com/gonutz/w32"
    )
    
    func main() {
        const path = `C:\some file`
    
        size := w32.GetFileVersionInfoSize(path)
        if size <= 0 {
            panic("GetFileVersionInfoSize failed")
        }
    
        info := make([]byte, size)
        ok := w32.GetFileVersionInfo(path, info)
        if !ok {
            panic("GetFileVersionInfo failed")
        }
    
        fixed, ok := w32.VerQueryValueRoot(info)
        if !ok {
            panic("VerQueryValueRoot failed")
        }
        version := fixed.FileVersion()
        fmt.Printf(
            "file version: %d.%d.%d.%d
    ",
            version&0xFFFF000000000000>>48,
            version&0x0000FFFF00000000>>32,
            version&0x00000000FFFF0000>>16,
            version&0x000000000000FFFF>>0,
        )
    
        translations, ok := w32.VerQueryValueTranslations(info)
        if !ok {
            panic("VerQueryValueTranslations failed")
        }
        if len(translations) == 0 {
            panic("no translation found")
        }
        fmt.Println("translations:", translations)
    
        t := translations[0]
        // w32.CompanyName simply translates to "CompanyName"
        company, ok := w32.VerQueryValueString(info, t, w32.CompanyName)
        if !ok {
            panic("cannot get company name")
        }
        fmt.Println("company:", company)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 安装Paddleocr时报错无法解决
  • ¥15 python中transformers可以正常下载,但是没有办法使用pipeline
  • ¥50 分布式追踪trace异常问题
  • ¥15 人在外地出差,速帮一点点
  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改
  • ¥15 Windows 系统cmd后提示“加载用户设置时遇到错误”
  • ¥50 vue router 动态路由问题
  • ¥15 关于#.net#的问题:End Function
  • ¥15 无法import pycausal
  • ¥15 weditor无法连接模拟器Local server not started, start with?