You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:50:26