猿问

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

我想获取重命名文件夹的日期,可以从终端使用命令完成stat,例如:


> stat -x folders/folder1

File: "folders/folder1"

Size: 64           FileType: Directory

Mode: (0755/drwxr-xr-x)         Uid: (2006390509/username)  Gid: 

(296108113/EMEA\Domain Users)

Device: 1,4   Inode: 2599274    Links: 2

Access: Mon Nov 12 17:59:57 2018

Modify: Mon Nov 12 14:12:20 2018

Change: Mon Nov 12 17:28:01 2018 

更改日期是文件夹元数据更改的最后日期,包括重命名。


有没有办法在不使用os.exec和解析输出的情况下使用 Go 获取它?os.Stat似乎仅提供最后修改日期,该日期在重命名文件夹时不会更改。




心有法竹
浏览 236回答 2
2回答

婷婷同学_

更改时间不可访问,但可以通过存储该数据的方式os.FileInfo获取。os.FileInfo.Sys()你可以得到它package mainimport (    "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可能是你想要的。

倚天杖

如果您对调用 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 GMT2018-11-12 17:57:43.042208583 +0000 GMT这似乎正确地反映了我更改目录名的时间,而不是创建时间(如第一个日期)
随时随地看视频慕课网APP

相关分类

Go
我要回答