如何用golang擷取linux上檔案的訪問/建立/修改時間

來源:互聯網
上載者:User

在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為我們的開發提供了極大的便利,希望大家都能瞭解和接觸這門語言。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.