在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, itwill be of type *PathError.

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

type FileInfo interface {Name() string       // base name of the fileSize() int64        // length in bytes for regular files; system-dependent for othersMode() FileMode     // file mode bitsModTime() time.Time // modification timeIsDir() 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_tstat_t := finfo.Sys().(*syscall.Stat_t)fmt.Println(stat_t)// atime,ctime,mtime分别是访问时间,创建时间和修改时间,具体参见man 2 statfmt.Println(timespecToTime(stat_t.Atim))fmt.Println(timespecToTime(stat_t.Ctim))fmt.Println(timespecToTime(stat_t.Mtim))
}

这是输出效果:

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

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

转载于:https://www.cnblogs.com/apocelipes/p/9401923.html

如何用golang获取linux上文件的访问/创建/修改时间相关推荐

  1. 获得各平台文件的访问 创建 修改时间

    创建各平台文件 xx_linux.go   xx_darwin.go  xx_windows.go "+build linux"必须在所有代码的前面,但这条注释之前可以有空行或其它 ...

  2. linux java读取文件夹下文件名,Java获取Linux上指定文件夹下所有第一级子文件夹...

    说明:需要只获得第一级文件夹目录 package com.sunsheen.jfids.studio.monitor.utils; import java.io.BufferedReader; imp ...

  3. 如何获取服务器上文件的hashcode,java获取文件hashcode

    java获取文件hashcode [2021-02-05 18:36:57]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(&quo ...

  4. Delphi中取得和设置硬盘上文件的创建日期、修改日期、访问日期、文件属性

    Delphi中取得和设置硬盘上文件的创建日期.修改日期.访问日期.文件属性 function FileAge(const FileName: string): Integer; $[SysUtils. ...

  5. python 判断该地址 文件创建时间2020年10月14日14时25分32秒 文件最后一次访问时间 文件最后一次修改时间

    #1.判断该地址 #1.文件名 #2.文件路径 #3.文件扩展名 #4.文件创建时间2020年10月14日14时25分32秒 #5.文件最后一次访问时间 #6.文件最后一次修改时间 #7.文件的大小( ...

  6. Golang: 获取mp3歌曲文件时长

    音乐时长计算公式 音乐时长 = (音乐文件大小 - 歌曲元信息大小(ID3v1,ID3v2)) / 码率 (注意单位转换) 音乐元数据([]byte)可以从文件或网络中获取 ID3v1信息位于元数据尾 ...

  7. mac打开服务器文件管理,mac通过samba服务器远程管理linux上文件

    samba介绍 samba实现了在各个平台共享文件和打印机. 解决了在Mac上远程连接一台Linux服务器,管理一些文件,不仅需要进行常规的本地文件操作,还需要上传.下载.编辑的难题. linux配置 ...

  8. linux给文件添加链接,Linux给文件或目录创建软链接或硬链接的方法

    有时linux用户们为了使用方便,会想给电脑中的文件或目录创建软链接或硬链接.不过有些用户不清楚该怎么给这些文件或目录创建软链接或硬链接该怎么办呢?别急,现在小编就来教你解决的方法. 解决方法: 当我 ...

  9. linux上php读取和创建word文档

    总结下本人在日常工作中使用php操作word的一些实战. 方法一:利用php com模块.也即利用word提供的本地api,所有只适用于windows系统上. [php] view plaincopy ...

最新文章

  1. GPT-3到来,程序员会被AI取代吗?
  2. 让批处理运行不显示窗口的两个方法
  3. Microbit-高温报警系统
  4. Android中实现照片滑动时左右进出的动画的xml代码
  5. 面试中关于String、StringBuffer、StringBuilder的频率最高问题
  6. 最大流算法(Edmons-Karp + Dinic 比较) + Ford-Fulkson 简要证明
  7. 创建一个对象和i++是否原子性的理解
  8. html form表单提交验证
  9. Contacts Provider使用
  10. 微信获取unionid
  11. 用友ERP实施流程(不是本人所写,只是个搬运工!)
  12. 蓝牙 - 被高通收购的CSR的一颗蓝牙芯片
  13. Jquery.ajax使用
  14. 笔记本电脑WIFI图标消失解决方案大全,无WIFI图标也能自由连WIFI上网。
  15. Word2003画箭头锦囊 斜线箭头、双箭头、折线箭头
  16. (三)JMockit API:@Mocked -基础篇
  17. 如何简单粗暴的干掉2345主页
  18. Mongodb被黑经历
  19. Nova API服务之Nova API服务的启动
  20. 程序员实用工具网站(原文有图片,本篇只是简单记录)

热门文章

  1. LeetCode —— 71.简化路径(Python3)
  2. mysql中in的使用
  3. 离散余弦变换原理及实现【转载】
  4. Multi-thread--提高C++性能的编程技术笔记:多线程内存池+测试代码
  5. CV_MAT_ELEM——获取矩阵元素和初始化矩阵
  6. 单目摄像机测距(python+opencv)(转载)
  7. Redis简介及配置文件介绍
  8. JQuery ZTree简单使用
  9. oracle的备份与恢复
  10. h0152. 故事计算题(计蒜客——西邮K题)解析