如何用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上文件的访问/创建/修改时间的更多相关文章
- touch — 设定文件的访问和修改时间
PHP touch 设定文件的访问和修改时间 touch (PHP 4, PHP 5) touch — 设定文件的访问和修改时间 说明 bool touch ( string $filename [, ...
- 使用PowerShell来修改文件访问,创建,修改时间属性
Function Set-FileTimeStamps { Param ( [Parameter(mandatory=$true)] [string[]]$path, [datetime]$date ...
- linux下的shell命令的编写,以及java怎样调用linux的shell命令(java怎样获取linux上的网卡的ip信息)
程序猿都非常懒,你懂的! 近期在开发中,须要用到server的ip和mac信息.可是server是架设在linux系统上的,对于多网口,在获取ip时就产生了非常大的问题.以下是在windows系统上, ...
- linux上文件的上传和下载
现整理一篇linux上文件的上传和下载 第一种方式就是在windos上安装工具 如: 工具如何使用我就不赘述了,easy 第二种方式就是使用liux的命令(首先是文件上传) 上传文件(首先创建文件夹如 ...
- js 获取input type="file" 选择的文件大小、文件名称、上次修改时间、类型等信息
文件名的传递 ---全路径获取 $('#file').change(function(){ $('#em').text($('#file').val()); }); 文件名的传递 ---只获取文件名 ...
- Linux中文件夹访问权限不足
经常操作Linux服务器,远程访问会遇到403问题,本篇讲述nginx下文件权限的修改. 1.命令修改该文件夹的权限 chmod -R 755 /usr/local/.... 文件夹的路径 2.修 ...
- delphi获取文件的创建/修改时间、按时间删除指定文件下的文件
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrl ...
- mp4、AAC数据格式、解析文件的创建修改时间
AAC文件 资料: http://blog.csdn.net/u013427969/article/details/53091594 http://blog.chinaunix.net/uid-260 ...
- utime修改文件的存取,修改时间
#include <sys/types.h> #include <utime.h> int utime(const char *filename, const struct u ...
随机推荐
- JS入门经典第四章总结
charAt():该函数有一个参数,即选择哪一个位置上的参数.返回值就是该位置上的字符. charCodeAt():该函数有一个参数,即选择哪一个位置上的参数.返回值是该位置字符在Unicode字符集 ...
- Minimum setup for Apache+AD SSO
参照: http://www.grolmsnet.de/kerbtut/ https://docs.typo3.org/typo3cms/extensions/ig_ldap_sso_auth/2.1 ...
- 学习Python第五天
今天咱们讲一下元组,hash,字典,元组是数据类型其中之一 元组的特性为有序的,不可变的,但是如果其中有可变元素,这些可变元组还是可以改变的,代码如下: 元组的写法:name = (‘roy’,‘al ...
- WordPress自动裁剪768w像素缩略图的解决办法
最新观赏鱼在折腾一个新的WordPress站点,即使通过后台把多媒体裁剪的宽高都设置为0时,移除主题可能存在的自动裁剪大小,WordPress依然会在上传图片的时候自动裁剪一个宽为768像素的图片.并 ...
- 大数据开发主战场hive (企业hive应用)
hive在大数据套件中占很的地位,分享下个人经验. 1.在hive日常开发中,我们首先面对的就是hive的表和库,因此我要先了解库,表的命名规范和原则 如 dwd_whct_xmxx_m 第1部分为表 ...
- ECharts常用设置记录
一.配置文档 http://echarts.baidu.com/option.html#title 二.属性配置 1.图表与边框容器距离. grid: { top: '10%', left: '70' ...
- spring-data-redis和jedis版本对应收集总结
基于spring主版本为4.3.13.RELEASE的项目,测试以下对应版本可用. spring-data-redis版本 jedis版本 备注 1.5.2.RELEASE 2.7.3 1.6.0 ...
- 河北大学python选修课00次作业
学习python认为挺好玩的一件事.看到很多关于python的东西在网上,看到有这个课,认为只是选修课,别人也可以选,自己想不能被别人落下,别人都会,我不会可不行. 而且认为python是一个很强大的 ...
- 判断exe执行结束,事件监听
[转载]C#调用Exe文件的方法及如何判断程序调用的exe已结束 原文地址:C#调用Exe文件的方法及如何判断程序调用的exe已结束作者:guoguo 很简单的代码就可以实现C#调用EXE文件 ...
- nginx安装配置并布置网站
之前做的网站都是用的apache,关于apache和Nginx的区别也不说了,百度上也都有,而且apche和nginx可以共存,这个之后再说. 首先安装nginx,我用的云主机,直接用yum安装 #y ...