如何在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.
golang中的Fileinfo给出了名称,修改时间,大小等。我需要获取特定文件的描述(例如:产品 名称,原始档名等)在Windows中使用golang。 p> div>
答
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)
}