首页 >后端开发 >Golang >如何在 Go 中检测文件更改?

如何在 Go 中检测文件更改?

Barbara Streisand
Barbara Streisand原创
2024-12-02 22:38:10829浏览

How Can I Detect File Changes in Go?

在 Go 中检测文件更改

问题:

如何检测文件何时发生变化使用 Go 编程语言进行更改?有没有办法模拟 Linux 的 fcntl() 功能,可以在特定文件发生更改时发出通知?

答案:

而 fcntl() 函数则没有Go 中可用,还有其他技术可以用来实现文件更改

跨平台方法:

此方法涉及定期轮询文件是否有更改:

func watchFile(filePath string) error {
    initialStat, err := os.Stat(filePath)
    if err != nil {
        return err
    }

    for {
        stat, err := os.Stat(filePath)
        if err != nil {
            return err
        }

        if stat.Size() != initialStat.Size() || stat.ModTime() != initialStat.ModTime() {
            break
        }

        time.Sleep(1 * time.Second)
    }

    return nil
}

此函数重复检查文件的大小和修改时间,并在更改时返回

使用示例:

doneChan := make(chan bool)

go func(doneChan chan bool) {
    defer func() {
        doneChan <- true
    }()

    err := watchFile("/path/to/file")
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println("File has been changed")
}(doneChan)

<-doneChan

此示例演示如何使用 watchFile 函数检测文件更改并通过通道通知主例程。

注意:

这种跨平台方法并不像与本机系统调用一样高效,但提供了一种简单且可移植的方式来跟踪文件更改。对于某些用例来说可能就足够了。

以上是如何在 Go 中检测文件更改?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn