用FileInfo.sys()获取文件的详细信息

shencejun · 2013-11-16 04:57:54 · 15420 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2013-11-16 04:57:54 的主题,其中的信息可能已经有所发展或是发生改变。

使用os.Stat()获取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)

} 这些,如果要获取详细的信息,就要使用FileInfo.sys()了,它获取的是值是*syscall.Stat_t 类型,使用反射就可以意获取详细信息的内容了。

代码:

if fileInfo, err := os.Stat(“/home/demo.txt”); err == nil {
    Atim := reflect.ValueOf(fileInfo.Sys()).Elem().FieldByName("Atim").Field(0).Int()
    println("文件的访问时间:\n", Atim, )
}

具体可以获取的字段见:

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

} 上面代码中FieldByName("Atim").Field(0).Int()就是获取Stat_t类型的Atim字段的第一个字段的值。你可以根据具体需要来获取想应的字段值。


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

15420 次点击  ∙  1 赞  
加入收藏 微博
6 回复  |  直到 2017-07-25 08:53:00
shencejun
shencejun · #1 · 11年之前

获取详细信息的代码是:

if fileInfo, err := os.Stat(“/home/demo.txt”); err == nil { 
   Atim := reflect.ValueOf(fileInfo.Sys()).Elem().FieldByName("Atim").Field(0).Int()
  println("文件的访问时间:\n", Atim, ) 
}

怎么没法编辑帖子呢

shencejun
shencejun · #2 · 11年之前

获取详细信息的代码是:

if fileInfo, err := os.Stat(“/home/demo.txt”); err == nil { 
   Atim := reflect.ValueOf(fileInfo.Sys()).Elem().FieldByName("Atim").Field(0).Int()
  println("文件的访问时间:\n", Atim, ) 
}

怎么没法编辑帖子呢

polaris
polaris · #3 · 11年之前

额,没实现编辑功能……有空搞搞

shencejun
shencejun · #4 · 11年之前
polarispolaris #3 回复

额,没实现编辑功能……有空搞搞

这个表单存在重复提交的问题哦,大神

cachegirl
cachegirl · #5 · 9年之前

哭了,表示在windows系统(64位)上,os.Stat返回的文件信息是 *syscall.win32FileAttributeData type Win32FileAttributeData struct { FileAttributes uint32 CreationTime Filetime LastAccessTime Filetime LastWriteTime Filetime FileSizeHigh uint32 FileSizeLow uint32 }

最好用 reflect.ValueOf(info.Sys()).String()查看一下,我的返回的是*syscall.Win32FileAttributeData,然后我用的代码是 reflect.ValueOf(info.Sys()).Elem().FieldByName("CreationTime").Field(0).Uint() 来获取文件的创建时间。

go2run
go2run · #6 · 8年之前
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传