首頁 > 後端開發 > Golang > 如何在 Go 中檢測文件更改?

如何在 Go 中檢測文件更改?

Barbara Streisand
發布: 2024-12-02 22:38:10
原創
822 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板