为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中获取文件夹的更改日期

在 Go 中获取文件夹的更改日期

Go
心有法竹 2023-05-08 15:51:44
我想获取重命名文件夹的日期,可以从终端使用命令完成stat,例如:> stat -x folders/folder1File: "folders/folder1"Size: 64           FileType: DirectoryMode: (0755/drwxr-xr-x)         Uid: (2006390509/username)  Gid: (296108113/EMEA\Domain Users)Device: 1,4   Inode: 2599274    Links: 2Access: Mon Nov 12 17:59:57 2018Modify: Mon Nov 12 14:12:20 2018Change: Mon Nov 12 17:28:01 2018 更改日期是文件夹元数据更改的最后日期,包括重命名。有没有办法在不使用os.exec和解析输出的情况下使用 Go 获取它?os.Stat似乎仅提供最后修改日期,该日期在重命名文件夹时不会更改。
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

更改时间不可访问,但可以通过存储该数据的方式os.FileInfo获取。os.FileInfo.Sys()


你可以得到它


package main


import (

    "fmt"

    "log"

    "os"

    "syscall"

    "time"

)


func main() {

    f, err := os.Stat("your/dir")

    if err != nil {

        log.Fatalf("err reading: %v", err)

    }


    //access change time saved in os.FileInfo.Sys()

    changeTime := f.Sys().(*syscall.Stat_t).Ctim


    fmt.Print(time.Unix(changeTime.Unix()).String())

}

当然你需要检查f.Sys()它是否是正确的类型,但是 yeahsyscall.Stat_t.Ctim可能是你想要的。


查看完整回答
反对 回复 2023-05-08
?
倚天杖

TA贡献1828条经验 获得超3个赞

如果您对调用 os.Exec 感到满意,也许您不介意跨平台问题。

无论如何,这段代码对我来说都是有效的。不确定它如何/是否可以在 Windows 上运行:

file, err := os.Open("test")

if err != nil {

    panic(err)

}


stat, err := file.Stat()

sys := stat.Sys().(*syscall.Stat_t)

changedTime := time.Unix(sys.Ctim.Unix())


fmt.Println(stat.ModTime())

fmt.Println(changedTime)

当我跑步时


mv test test1 && mv test1 test && go run main.go

它给了我:


2018-11-12 17:31:38.659095951 +0000 GMT

2018-11-12 17:57:43.042208583 +0000 GMT

这似乎正确地反映了我更改目录名的时间,而不是创建时间(如第一个日期)


查看完整回答
反对 回复 2023-05-08
  • 2 回答
  • 0 关注
  • 235 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信