gpt4 book ai didi

go - 如何检测 Golang 中打开文件的文件名更改

转载 作者:IT王子 更新时间:2023-10-29 01:19:39 26 4
gpt4 key购买 nike

我使用 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)
}
}

这只是开始一个无限循环,每 5 秒运行一次 file.Stat() 以获取文件详细信息,然后打印出名称。然而,尽管在运行时更改了文件名,但上面的输出并没有改变。

details.Name() 替换为 details.Size() 但是会注意到文件大小发生了变化。

这仅仅是我的 Go 版本中的一个错误,还是我只是做错了什么?我在任何地方都找不到这样的问题。

我在 Mac 上运行它,Go 版本 1.1.1 (darwin/amd64)。

提前感谢您的任何回复:)

最佳答案

在类 Unix 操作系统上,一旦您打开一个文件,它就不再与名称相关联。您获得的文件描述符仅与您打开的文件的 inode 相关联。文件的所有元数据都与 inode 相关联。没有从 inode 获取文件名的简单方法,因此你想要的是不可能的,除非你使用的操作系统提供了一种特殊的方法来做到这一点。

另外:你想观察什么文件名?一个文件可以有多个名称或根本没有名称(例如典型的临时文件)。

我认为你唯一能做的是:

  • 打开文件,记住文件名
  • 定期对文件名调用 Stat 以查看 inode 是否匹配
  • 如果 inode 不同,则您的文件已被移动

但是,这不会为您提供新的文件名。这样的事情是不可能做到的。

关于go - 如何检测 Golang 中打开文件的文件名更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19080535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com