如何检测Golang中打开文件的文件名更改
发布时间:2020-12-16 19:03:13 所属栏目:大数据 来源:网络整理
导读:使用Go,我正在编写一个小实用程序,部分需要注意打开文件的文件名是否发生变化.以下代码说明了我尝试的方法: package mainimport "os"import "fmt"import "time"func main() { path := "data.txt" file,_ := os.Open(path) for { details,_ := file.Stat() f
使用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.Size()替换details.Name()会注意到filesize的更改. 这只是我的Go版本中的一个错误,还是我只是做错了?我无法在任何地方找到这样的问题. 我在Mac上运行它,使用Go版本1.1.1(darwin / amd64). 在此先感谢任何回复:)
在类Unix操作系统上,一旦打开文件,它就不再与名称绑定.您获得的文件描述符仅与您打开的文件的inode相关联.文件的所有元数据都与inode相关联.没有简单的方法可以从inode获取文件的名称,因此您想要的是不可能的,除非您使用的操作系统提供了一种特殊的方法来执行此操作.
另外:你想要观察什么文件名?文件可以有多个名称或根本没有名称(例如典型的临时文件). 我认为你唯一能做的就是: >打开文件,记住文件名 但是,这不会给你新的文件名.这样的事情是不可能做到的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |