6

Go を使用して、開いているファイルのファイル名が変更された場合に通知する必要がある小さなユーティリティを作成していました。以下のコードは、私が試したアプローチを示しています。

package main

import "os"
import "fmt"
import "time"

func main() {

    path := "data.txt"
    file, _ := os.Open(path)

    for {
        details, _ := file.Stat()
        fmt.Println(details.Name())
        time.Sleep(5 * time.Second)
    }
}

これは無限ループを開始し、file.Stat()5 秒ごとに実行してファイルの詳細を取得し、名前を出力します。ただし、実行中にファイル名を変更しても、上記の出力は変わりません。

ただし、に置き換えるdetails.Name()details.Size()、ファイルサイズの変更に気づきます。

これは私のバージョンの Go の単なるバグですか、それとも間違ったことをしているだけですか? そのような問題についての言及はどこにもありません。

Goバージョン1.1.1(darwin/amd64)のMacでこれを実行しています。

返信ありがとうございます:)

4

2 に答える 2

2

残念ながら、一般に開いているファイルの名前を見つけるのは非常に難しい問題です。

すべてfile.Name()はこれです(ドキュメントを参照してください

// Name returns the name of the file as presented to Open.
func (f *File) Name() string { return f.name }

いくつかのアイデアについては、この質問を確認することをお勧めします: C でファイル記述子からファイル名を取得します。回答には、Linux、Windows、および Mac 用のソリューションがあります。

于 2013-09-29T18:54:04.283 に答える