Go でのファイル変更の検出: 実用的なソリューション
Go 言語はファイル処理のための広範な機能を提供しますが、ファイル変更の検出はそれほど簡単ではありませんUnix システムのように簡単です。これに対処するために、os パッケージを活用したクロスプラットフォームのアプローチを検討してみましょう。
ファイルの変更の検出
os パッケージは、ファイル属性を取得する便利な方法を提供します。サイズや最終変更時刻も含まれます。これらの属性を定期的に比較することで、ファイルが変更された時期を特定できます。
次のコード スニペットは、ファイル変更検出を実装する方法を示しています。
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
このアプローチは fcntl() のようなシステム コールほど効率的ではありませんが、シンプルであり、プラットフォーム間で確実に動作します。これは、低レベルのシステム関数にアクセスできない場合に特に役立ちます。
以上がGo でクロスプラットフォームの方法でファイルの変更を検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。