ホームページ > バックエンド開発 > Golang > Go でクロスプラットフォームの方法でファイルの変更を検出するにはどうすればよいですか?

Go でクロスプラットフォームの方法でファイルの変更を検出するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-04 12:00:27
オリジナル
737 人が閲覧しました

How Can I Detect File Changes in Go in a Cross-Platform Way?

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート