当前位置: 首页 > 面试题库 >

如何获取文件的ctime,atime,mtime并进行更改

芮念
2023-03-14
问题内容

如何使用Go获取文件的ctime,mtime,atime并进行更改?

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


问题答案:

的Linux

时间

ctime是索引节点或文件更改时间。更改文件属性(例如更改所有者,更改权限或将文件移至其他文件系统)时,ctime会更新,但在修改文件时也会更新。

文件ctime和atime取决于操作系统。对于Linux,更改索引节点或文件时,Linux将ctime设置为当前时间戳。

这是一个示例,在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


 类似资料:
  • 问题内容: 一些文件系统(例如ext4和JFS)提供atime / mtime字段的纳秒分辨率。如何读取ns分辨率字段?该系统调用返回其为第二分辨率。 问题答案: 第二解析时间在以下字段中: 但是该人http://www.kernel.org/doc/man- pages/online/pages/man2/stat.2.html的 “ NOTES”部分说: 从内核2.5.48开始,stat结构为

  • 问题内容: 为了下载文件,我正在创建一个urlopen对象(urllib2类)并分块读取它。 我想多次连接到服务器,并在六个不同的会话中下载文件。这样做,下载速度应该会更快。许多下载管理器都具有此功能。 我考虑过在每次会话中指定要下载的文件部分,并以某种方式在同一时间处理所有会话。我不确定如何实现这一目标。 问题答案: 听起来您想使用可用的HTTP Range 风格之一。 编辑 更新的链接以指向w

  • 问题内容: 当我使用读取Java文件的时,返回值被截断为整秒。我知道这可以在其他系统上获得毫秒级的mtimes,所以我的可能有什么不同? 这是一个完整的独立测试,可以编译并运行: 输出为(带有我的特定测试文件),而显示: 我希望Java输出是。 我在ext4的Linux上运行。我同时尝试了openjdk 1.7和Oracle jdk 1.8。 问题答案: 通过此提交,在Java 8中添加了在* n

  • 问题内容: 我希望使用该类来更改Java中文件的时间戳记元数据。 我想更改所有3个Linux / ext4时间戳(最后修改,访问和更改)。 我可以按如下方式更改前两个时间戳字段: 但是,我无法修改文件的最后一次 更改: 时间。同样,值得关注的是文档中没有提到更改时间戳。最接近的可用属性是,我尝试没有成功。 关于如何根据Java中的自定义时间戳修改文件元数据的任何想法? 谢谢! 问题答案: 我可以使

  • 我有以下JSON,我希望能够获得某个键的值,并相应地更新它。 例如,看看第一个JSON对象中的键'a',我希望能够获得它的值'2',然后将'a'的值更新为我想要的任何值。重要的是,如果我想重新格式化日期/时间(例如)并更新键,我可以使用该值。 感谢所有帮助

  • 问题内容: 我想我的调用或当我指定一个文件被修改浏览器。修改文件后,我该如何“观看”该文件以执行某些操作? 以编程方式看来,这些步骤是..基本上每秒设置一个永无休止的间隔,并缓存初始修改日期,然后每当更改一次调用X时便比较该日期。 问题答案: 如前所述,您可以使用pyinotify: 例如: 这比轮询更有效。内核会告诉您何时进行操作,而无需您不断询问。