文章大纲

用go语言如何获取Windows系统里文件的修改时间

2023-04-21 13:51:31

需求背景

如下图,脚本B从数据文件中采集数据:


当数据文件没有更新时,脚本B采集的都是无效数据。所以需要抓取数据文件的更新时间,如果超过5分钟没更新,就通知脚本A的负责人去及时处理,避免生产数据的更多丢失。


代码实现

仿照网上,写了如下代码进行实现:

f, err := os.Open(filePath)
if err != nil {
log.Println("open file error")
return
}
defer f.Close()

finfo
, err := f.Stat()
if err != nil {
log.Println("stat fileinfo error")
return
}
winFileAttr := finfo.
Sys().(*syscall.Win32FileAttributeData)
fmt.Println("last write time:", winFileAttr.LastWriteTime)
lastWriteTime :=
time.Unix(winFileAttr.LastWriteTime.Nanoseconds()/1e9, 0)
fmt.Println("last write time2:", lastWriteTime)
timeAfterFormat := lastWriteTime.
Format("2006-01-02 15:04:05") //1991-01-01 01:01:01
fmt.Println("update time:", timeAfterFormat)


运行后,打印内容如下:

last write time: {2330105708 31026239}
last write time2: 2023-04-11 14:33:35 +0800 CST
update time: 2023-04-11 14:33:35


本文为翟码农个人博客蓝翟红尘go开发分类下的有关获取Windows系统里文件修改时间的原创文章,转载请注明出处:用go如何获取Windows系统里文件的修改时间 - 翟码农技术博客 (zhai14.com)

http://www.zhai14.com/blog/how-to-get-the-modified-time-of-windows-file-with-go.html


go语言中格式化时间有点奇葩,居然非得以“2006-01-02 15:04:05”这个固定的时间为模板,其它时间就不行,这时间谁记得住。



简单实现

如果文件一定存在的话,直接2行代码就可以了:

statInfo, _ := os.Stat(config.Index.Path)
fmt.Println("time", statInfo.ModTime())
timeAfterFormat := statInfo.ModTime().Format("2006-01-02 15:04:05")
fmt.Println("update time first:", timeAfterFormat)


如果想获取文件的其它属性,参考下面使用其它方法即可:

// A FileInfo describes a file and is returned by Stat and Lstat.
type FileInfo interface {
    Name() string       // 文件名称
    Size() int64        // 文件的字节长度
    Mode() FileMode     // file mode bits
    ModTime() time.Time // 修改时间
    IsDir() bool        // 是否是一个目录
    Sys() interface{}   // underlying data source (can return nil)
}


如果像获取文件创建时间什么的,就从下面这行代码入手:

winFileAttr := statInfo.Sys().(*syscall.Win32FileAttributeData)




我要评论
评论列表