当前位置: 首页 > 编程笔记 >

使用golang获取linux上文件的访问/创建/修改时间

宋涵衍
2023-03-14
本文向大家介绍使用golang获取linux上文件的访问/创建/修改时间,包括了使用golang获取linux上文件的访问/创建/修改时间的使用技巧和注意事项,需要的朋友参考一下

在linux上想获取文件的元信息,我们需要使用系统调用lstat或者stat。

在golang的os包里已经把stat封装成了Stat函数,使用它比使用syscall要方便不少。

这是os.Stat的原型:

func Stat(name string) (FileInfo, error)
    Stat returns a FileInfo describing the named file. If there is an error, it
    will be of type *PathError.

返回一个os.FileInfo,这里面包含有文件的元信息:

type FileInfo interface {
 Name() string  // base name of the file
 Size() int64  // length in bytes for regular files; system-dependent for others
 Mode() FileMode  // file mode bits
 ModTime() time.Time // modification time
 IsDir() bool  // abbreviation for Mode().IsDir()
 Sys() interface{} // underlying data source (can return nil)
}
 A FileInfo describes a file and is returned by Stat and Lstat.

重点看到Sys()这个方法,通过它我们可以获得*syscall.Stat_t,也就是stat和lstat使用并填入文件元信息的struct stat *。
os.FileInfo里的信息并不完整,所以我们偶尔需要使用*syscall.Stat_t来获取自己想要的信息,比如文件的创建时间。
因为Stat_t里的时间都是syscall.Timespec类型,所以我们为了输出内容的直观展示,需要一点helper function:

func timespecToTime(ts syscall.Timespec) time.Time {
 return time.Unix(int64(ts.Sec), int64(ts.Nsec))
}

然后接下来就是获取修改/创建时间的代码:

func main() {
 finfo, _ := os.Stat(filename)
 // Sys()返回的是interface{},所以需要类型断言,不同平台需要的类型不一样,linux上为*syscall.Stat_t
 stat_t := finfo.Sys().(*syscall.Stat_t)
 fmt.Println(stat_t)
 // atime,ctime,mtime分别是访问时间,创建时间和修改时间,具体参见man 2 stat
 fmt.Println(timespecToTime(stat_t.Atim))
 fmt.Println(timespecToTime(stat_t.Ctim))
 fmt.Println(timespecToTime(stat_t.Mtim))
}

这是输出效果:

你会发现修改时间居然提前于创建时间!别担心,那是因为atime,ctime, mtime都可以人为修改,一些从网上下载回来的文件也会包含元信息,所以才会出现这种情况,并不是你穿越了:-P

golang为我们的开发提供了极大的便利,希望大家都能了解和接触这门语言。

总结

以上所述是小编给大家介绍的使用golang获取linux上文件的访问/创建/修改时间,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!

 类似资料:
  • 本文向大家介绍PHP中获取文件创建日期、修改日期、访问时间的方法,包括了PHP中获取文件创建日期、修改日期、访问时间的方法的使用技巧和注意事项,需要的朋友参考一下 php获取文件创建时间、修改时间常用代码 filemtime ( string filename ) 返回文件上次被修改的时间,出错时返回 FALSE。时间以 Unix 时间戳的方式返回,可用于 date()。 filectime (

  • 问题内容: 我正在使用C程序,需要获取文件的最后修改时间。程序要做的是一个函数循环遍历目录中的每个文件,当找到特定文件时,它将调用另一个函数来检查文件的最后修改时间。 在该目录下有一个,和等当我使用ll命令我可以看到,列出目录在linux 和进行了修改,在5月4日,并于5月3日进行了修改。 但是,当程序检查这些文件中的每个文件时,它总是会返回3rd may。下面是我正在使用的代码。 我尝试了的所有

  • 本文向大家介绍vbscript获取文件的创建时间、最后修改时间和最后访问时间的方法,包括了vbscript获取文件的创建时间、最后修改时间和最后访问时间的方法的使用技巧和注意事项,需要的朋友参考一下 FileSystemObject 对象简介: FileSystemObject 对象用于访问服务器上的文件系统。此对象可对文件、文件夹以及目录路径进行操作。也可通过此对象获取文件系统的信息。 下面的代

  • 既然知道了如何在 Linux 系统中创建目录,接下来你可能会想在这些目录中创建一些文件,可以使用  touch 命令。 需要注意的是,touch 命令不光可以用来创建文件(当指定操作文件不存在时,该命令会在当前位置建立一个空文件),此命令更重要的功能是修改文件的时间参数(但当文件存在时,会修改此文件的时间参数)。 Linux 系统中,每个文件主要拥有 3 个时间参数(通过 stat 命令进行查看)

  • 问题内容: 我试图读取Golang中的JSON文件,修改此JSON文件,然后创建一个新的JSON文件/在此JSON文件上进行覆盖。我在网上看到了几个示例,但似乎无法将两个和两个放在一起以获得所需的结果。我尝试只在GO中创建自己的JSON str并对其进行修改,但仍然失败。 我已经尝试过几次读取文件,以下是我的最佳尝试: 这是一个示例输出: 我只是对如何修改我想要的内容感到困惑,特别是上述示例输出的

  • 问题内容: 我有一个脚本,该脚本需要根据文件创建和修改日期执行一些操作,但必须在Linux和Windows上运行。 在Python中获取文件创建和修改日期/时间的最佳跨平台方法是什么? 问题答案: 以跨平台的方式获取某种修改日期很容易-只需调用,你就会获得Unix时间戳,该时间戳是文件的最后修改时间。 另一方面,获取文件的创建日期是不固定的,并且依赖于平台,甚至在三大操作系统之间也有所不同: 在上