使用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版本中的错误,还是我做错了什么?我在任何地方都找不到这样的问题。
我正在Mac上使用Go版本1.1.1(darwin / amd64)运行它。
预先感谢您的任何答复:)
在类似Unix的操作系统上,一旦打开文件,该文件便不再与名称绑定。您获得的文件描述符仅与您打开的文件的索引节点相关。文件的所有元数据都与索引节点关联。没有简单的方法可以从inode获取文件名,因此,除非您所使用的操作系统提供了一种特殊的方法来做到这一点,否则就不可能实现所需的操作。
另外:您要观察什么文件名?一个文件可以有多个名称,也可以根本没有名称(例如典型的临时文件)。
我认为您唯一可以做的是:
但是,这不会给您新的文件名。这样的事情不可能随身携带。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句