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

如何检测Golang中打开文件的文件名更改,第1张

概述使用Go,我正在编写一个小实用程序,部分需要注意打开文件的文件名是否发生变化.以下代码说明了我尝试的方法: package mainimport "os"import "fmt"import "time"func main() { path := "data.txt" file, _ := os.Open(path) for { detail 使用Go,我正在编写一个小实用程序,部分需要注意打开文件的文件名是否发生变化.以下代码说明了我尝试的方法:
package mainimport "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.Size()替换details.name()会注意到filesize的更改.

这只是我的Go版本中的一个错误,还是我只是做错了?我无法在任何地方找到这样的问题.

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

在此先感谢任何回复:)

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

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

我认为你唯一能做的就是:

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

但是,这不会给你新的文件名.这样的事情是不可能做到的.

总结

以上是内存溢出为你收集整理的如何检测Golang中打开文件的文件名更改全部内容,希望文章能够帮你解决如何检测Golang中打开文件的文件名更改所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1293722.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存