gpt4 book ai didi

file - 如何获取文件的 ctime、atime、mtime 并更改它们

转载 作者:IT老高 更新时间:2023-10-28 13:07:40 25 4
gpt4 key购买 nike

如何使用 Go 获取文件的 ctime、mtime、atime 并更改它们?

在 Go 1.1.2 中,* os.Stat 只能获取 mtime* os.Chtimes 可以改变 mtime 和 atime 但不能改变 ctime。

最佳答案

Linux

ctime

ctime is the inode or file change time. The ctime gets updated when the file attributes are changed, like changing the owner, changing the permission or moving the file to an other filesystem but will also be updated when you modify a file.

文件 ctime 和 atime 取决于操作系统。对于 Linux,ctime 由 Linux 设置为 inode 或文件更改时的当前时间戳。

这是一个在 Linux 上通过将 atime 和 mtime 设置为其原始值来隐式更改 ctime 的示例。

package main

import (
"fmt"
"os"
"syscall"
"time"
)

func statTimes(name string) (atime, mtime, ctime time.Time, err error) {
fi, err := os.Stat(name)
if err != nil {
return
}
mtime = fi.ModTime()
stat := fi.Sys().(*syscall.Stat_t)
atime = time.Unix(int64(stat.Atim.Sec), int64(stat.Atim.Nsec))
ctime = time.Unix(int64(stat.Ctim.Sec), int64(stat.Ctim.Nsec))
return
}

func main() {
name := "stat.file"
atime, mtime, ctime, err := statTimes(name)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(atime, mtime)
fmt.Println(ctime)
err = os.Chtimes(name, atime, mtime)
if err != nil {
fmt.Println(err)
return
}
atime, mtime, ctime, err = statTimes(name)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(atime, mtime)
fmt.Println(ctime)
}

输出:

2014-01-02 02:21:26.262111165 -0500 EST 2014-01-02 02:18:13.253154086 -0500 EST
2014-01-02 02:21:25.666108207 -0500 EST
2014-01-02 02:21:26.262111165 -0500 EST 2014-01-02 02:18:13.253154086 -0500 EST
2014-01-02 02:21:43.814198198 -0500 EST

关于file - 如何获取文件的 ctime、atime、mtime 并更改它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20875336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com