如何使用Golang在Windows系统中检测文件是否为快捷方式?
在Go中检测Windows快捷方式
在Windows系统中,用户常用的快捷方式是后缀为.lnk的文件,但仅通过后缀判断并不严谨(可手动修改后缀伪装),更可靠的方式是验证文件头部的固定标识——Windows快捷方式文件的前4字节为0x4C 0x00 0x00 0x00(对应ASCII的"L\0\0\0")。
以下是两种检测方案:
1. 简单后缀检查(快速但易误判)
适用于对精度要求不高的场景:
import ( "path/filepath" "strings" ) func IsShortcutByExt(path string) bool { return strings.ToLower(filepath.Ext(path)) == ".lnk" }
2. 精准文件头验证(推荐)
先通过后缀快速过滤,再读取文件头做精准验证,兼顾效率与准确性:
import ( "os" "path/filepath" "strings" ) func IsWindowsShortcut(path string) bool { // 先判断是否为有效文件 info, err := os.Stat(path) if err != nil || info.IsDir() { return false } // 后缀快速过滤非.lnk文件 if strings.ToLower(filepath.Ext(path)) != ".lnk" { return false } // 打开文件读取头部4字节 f, err := os.Open(path) if err != nil { return false } defer f.Close() header := make([]byte, 4) _, err = f.Read(header) if err != nil { return false } // 验证快捷方式专属文件头 return header[0] == 0x4C && header[1] == 0x00 && header[2] == 0x00 && header[3] == 0x00 }
补充说明
- Windows系统还有系统级符号链接(区别于用户快捷方式),这类链接可以直接用你提供的
IsSymLink函数检测,因为Go的os.ModeSymlink在Windows下同样支持识别系统符号链接。 - 注意:
os.Stat在Windows下不会解析.lnk文件的目标路径,它会将.lnk视为普通文件,因此无需使用os.Lstat。
内容的提问来源于stack exchange,提问作者Dablelv
相关产品推荐
相关产品推荐

