欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Go语言扫描目录并获取相关信息的方法

程序员文章站 2023-02-16 22:01:45
本文实例讲述了go语言扫描目录并获取相关信息的方法。分享给大家供大家参考。具体分析如下: 前言:最近看到go里面有一个func很容易就可以扫描整个目录,并且可以得到相应的...

本文实例讲述了go语言扫描目录并获取相关信息的方法。分享给大家供大家参考。具体分析如下:

前言:最近看到go里面有一个func很容易就可以扫描整个目录,并且可以得到相应的目录和文件信息,所以我将其进行了封装,拿到file info的所有信息 这样就可以方便的做其它用途了。

直接上代码,代码基于go version 1

复制代码 代码如下:
package main
import (
    "path/filepath"
    "os"
    "flag"
    "fmt"
    "time"
)
const (
    isdirectory             = iota
    isregular
    issymlink
)
type sysfile struct { 
    ftype       int
    fname       string
    flink       string
    fsize       int64
    fmtime      time.time
    fperm       os.filemode
}
type f struct {
    files []*sysfile
}
func (self *f) visit(path string, f os.fileinfo, err error) error {
    if ( f == nil ) {
        return err
    }
    var tp int
    if f.isdir() {
        tp = isdirectory
    }else if (  f.mode() & os.modesymlink ) > 0 {
        tp = issymlink
    }else{
        tp = isregular
    }
    inofile := &sysfile{
        fname : path,
        ftype : tp,
        fperm : f.mode(),
        fmtime: f.modtime(),
        fsize : f.size(),
    }
    self.files = append( self.files, inofile )
    return nil
}
func main() {
    flag.parse()
    root := flag.arg(0)
    self := f{
        files: make( []*sysfile, 0 ),
    }
    err := filepath.walk(root, func(path string, f os.fileinfo, err error) error {
        return self.visit(path, f, err)
    })
    if err != nil { 
      fmt.printf("filepath.walk() returned %v\n", err)
    }
    for _, v := range self.files {
        fmt.println( v.fname,v.fsize )
    }
}

希望本文所述对大家的go语言程序设计有所帮助。