2017-05-24 99 views
4

我正在尝试使用Go阅读目标快捷方式(.lnk)文件的文件/目录。使用Go阅读快捷方式的目标

我已经有一个目录中的所有文件的循环,我可以成功识别它是否是IsDir()的目录,或者它是否是文件IsRegular()。现在我需要一种方法来阅读它是否是一个链接,如果它是一个.lnk,它的路径,我可以打印它。

我找不到这样做的任何方式,我一直在搜索,但没有出现。任何想法?

回答

4

你需要阅读lnk binary format as defined by Microsoft

在围棋,其结构将转化

//structs that make up the shortcut specification [76 bytes] 
type ShellLinkHeader struct { 
    HeaderSize [4]byte   //HeaderSize 
    ClassID  [16]byte   //LinkCLSID 
    LinkFlags uint32   //LinkFlags  [4]byte 
    FileAttr uint32   //FileAttributes [4]byte 
    Creation [8]byte   //CreationTime 
    Access  [8]byte   //AccessTime 
    Write  [8]byte   //WriteTime 
    FileSz  [4]byte   //FileSize 
    IconIndex [4]byte   //IconIndex 
    ShowCmd  [4]byte   //ShowCommand 

    //[2]byte HotKey values for shortcut shortcuts 
    HotKeyLow byte    //HotKeyLow 
    HotKeyHigh byte    //HotKeyHigh 

    Reserved1 [2]byte   //Reserved1 
    Reserved2 [4]byte   //Reserved2 
    Reserved3 [4]byte   //Reserved3 
} 

(如exponential-decay/shortcuts使用)这个项目应该给你一个想法,如何快捷方式目标解码。

+0

[os.Readlink(path)](https://golang.org/pkg/os/#Readlink)在Windows上不起作用吗? – jrefior

+2

@jrefior对于符号链接('mklink'或者可能连接:'mklink/J'),如https://github.com/golang/go/issues/15978所示。不适用于“快捷方式”('lnk') – VonC

+0

@VonC你能写一个关于如何获得这些信息的小例子吗?我很迷茫与这一个:( – CoppolaEmilio