用golang创建Hardlink

use*_*648 6 windows hardlink go

我想使用golang创建一个文件的硬链接.os.Link()告诉我,不支持windows.因此我尝试使用os.exec,调用"mklink.exe".

cmd := exec.Command("mklink.exe", "/H", hardlink_path, file_path)
err := cmd.Run()
Run Code Online (Sandbox Code Playgroud)

但是,它告诉我,它无法在%PATH%中找到mklink.exe.这让我感到困惑,因为我可以使用cmd来调用它.

接下来我试图通过cmd间接调用它:

cmd := exec.Command("cmd.exe", "mklink.exe", "/H", hardlink_path, file_path)
err := cmd.Run()
Run Code Online (Sandbox Code Playgroud)

现在它不会返回任何错误,但是,它也不会创建硬链接.有什么建议?

小智 7

Go 1.4中添加了对本机Windows硬链接的Golang支持.具体来说,此提交使以下代码段工作:

err := os.Link("original.txt", "link.txt")
Run Code Online (Sandbox Code Playgroud)

请注意,并非所有Windows文件系统都支持硬链接.目前NTFS和UDF支持它,但FAT32,exFAT和较新的ReFS不支持.

完整示例代码:

package main

import (
    "log"
    "os"
    "io/ioutil"
)

func main() {   
    err := ioutil.WriteFile("original.txt", []byte("hello world"), 0600)
    if err != nil {
        log.Fatalln(err)
    }    

    err = os.Link("original.txt", "link.txt")
    if err != nil {
        log.Fatalln(err)
    }
}
Run Code Online (Sandbox Code Playgroud)