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 中国語 Web サイトの他の関連記事を参照してください。