国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

使用golang獲取linux上文件的訪問/創建/修改時間

2020-04-01 18:55:24
字體:
來源:轉載
供稿:網友

在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))}

這是輸出效果:

golang,linux,時間

你會發現修改時間居然提前于創建時間!別擔心,那是因為atime,ctime, mtime都可以人為修改,一些從網上下載回來的文件也會包含元信息,所以才會出現這種情況,并不是你穿越了:-P

golang為我們的開發提供了極大的便利,希望大家都能了解和接觸這門語言。

總結

以上所述是小編給大家介紹的使用golang獲取linux上文件的訪問/創建/修改時間,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景谷| 蓝田县| 靖宇县| 礼泉县| 邯郸市| 赤峰市| 德阳市| 西乌珠穆沁旗| 武宣县| 金沙县| 通城县| 浦东新区| 勃利县| 昌黎县| 兴隆县| 宜丰县| 犍为县| 太原市| 武安市| 南投县| 开江县| 徐闻县| 肃宁县| 鄯善县| 秭归县| 和林格尔县| 绍兴县| 米脂县| 太和县| 普安县| 河池市| 中宁县| 合阳县| 靖西县| 福鼎市| 淄博市| 和平区| 荆州市| 永济市| 佛山市| 乡宁县|