Go文件信息读取

使用go读取文件信息,获取文件名、尺寸、权限等信息。
- 使用os.Stat()可以获取文件信息

1
f, e := os.Stat(file)
  • 能够读取到的参数
    1
    2
    3
    4
    5
    6
    7
    8
    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)
    }

    通过file.sys()可以获取到更详细内容信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    //能够获取到的字段
    type Stat_t struct {
    Dev uint64
    Ino uint64
    Nlink uint64
    Mode uint32
    Uid uint32
    Gid uint32
    X__pad0 int32
    Rdev uint64
    Size int64
    Blksize int64
    Blocks int64
    Atim Timespec
    Mtim Timespec
    Ctim Timespec
    X__unused [3]int64
    }

    完整实例代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    package main

    import (
    "os"
    "fmt"
    "reflect"
    )

    func main() {
    file := "./info.go"
    f, e := os.Stat(file)
    fmt.Println(f,e)
    fmt.Println(f.Name()) //文件名
    fmt.Println(f.IsDir()) //是否目录
    fmt.Println(f.Mode()) //文件权限
    fmt.Println(f.ModTime()) //修改时间
    fmt.Println(f.Size()) //文件大小 默认单位b
    fmt.Println(f.Sys())

    if fileInfo, err := os.Stat(file); err == nil {
    Atim := reflect.ValueOf(fileInfo.Sys())
    fmt.Println(Atim)
    fmt.Println(Atim.Elem().FieldByName("Size"))
    }

    }

    输出

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    &{info.go 520 420 {63629718606 0 0x183260} {16777220 33188 1 19905738 503 80 0 [0 0 0 0] {1494121806 0} {1494121806 0} {1494121806 0} {1494121806 0} 520 8 4096 0 0 0 [0 0]}} <nil>
    info.go
    false
    -rw-r--r--
    2017-05-07 09:50:06 +0800 CST
    520
    &{16777220 33188 1 19905738 503 80 0 [0 0 0 0] {1494121806 0} {1494121806 0} {1494121806 0} {1494121806 0} 520 8 4096 0 0 0 [0 0]}
    &{16777220 33188 1 19905738 503 80 0 [0 0 0 0] {1494121806 0} {1494121806 0} {1494121806 0} {1494121806 0} 520 8 4096 0 0 0 [0 0]}
    520