应用Go操作文件,依据创立工夫(或批改工夫)进行不同解决。
在Mac上,文件相干的构造体字段在[syscall/ztypes_darwin_arm64.go]()下的Stat_t
:
type Stat_t struct { Dev int32 Mode uint16 Nlink uint16 Ino uint64 Uid uint32 Gid uint32 Rdev int32 Pad_cgo_0 [4]byte Atimespec Timespec Mtimespec Timespec Ctimespec Timespec Birthtimespec Timespec Size int64 Blocks int64 Blksize int32 Flags uint32 Gen uint32 Lspare int32 Qspare [2]int64}
工夫相干的有四个字段,即Atimespec、Mtimespec、Ctimespec和Birthtimespec。依据以下代码:
package mainimport ( "fmt" "github.com/pkg/errors" "os" "syscall" "time")func main() { file, err := os.Stat("/Users/fliter/blog") if err != nil && errors.Is(err, os.ErrNotExist) { fmt.Println("文件的确不存在,err is:", err) //创立多级目录 //os.MkdirAll("/Users/fliter/blog", os.ModePerm) } stat_t := file.Sys().(*syscall.Stat_t) fmt.Println(stat_t) fmt.Println(timespecToTime(stat_t.Atimespec)) // 拜访工夫 fmt.Println(timespecToTime(stat_t.Ctimespec)) // 批改工夫 fmt.Println(timespecToTime(stat_t.Mtimespec)) // 批改工夫 fmt.Println(timespecToTime(stat_t.Birthtimespec)) // 创立工夫}func timespecToTime(ts syscall.Timespec) time.Time { return time.Unix(ts.Sec, ts.Nsec)}
创立工夫并不是Ctimespec,而是Birthtimespec。
Ctimespec和Mtimespec仿佛都是批改工夫??
这就波及到UNIX/Linux操作系统中,文件相干的三个time---
atime,mtime,ctime
<img src="Linux系统文件的三种time-atime-ctime-mtime/0.png" width = 100% height = 50% />
mtime是指文件内容被最初一次批改的工夫,ctime则指文件的元数据(如权限,所有者等)最初一次被批改的工夫
在Linux中,能够通过stat命令查看
更多测试&验证相干,可参考此文
本文由mdnice多平台公布