[Go] Golang: 扫描目录并获取相关信息 →→→→→进入此内容的聊天室

来自 , 2021-02-06, 写在 Go, 查看 131 次.
URL http://www.code666.cn/view/0a7d7a81
  1. package main
  2.  
  3. import (
  4.     "path/filepath"
  5.     "os"
  6.     "flag"
  7.     "fmt"
  8.     "time"
  9. )
  10.  
  11. const (
  12.     IsDirectory             = iota
  13.     IsRegular
  14.     IsSymlink
  15. )
  16.  
  17. type sysFile struct {  
  18.     fType       int
  19.     fName       string
  20.     fLink       string
  21.     fSize       int64
  22.     fMtime      time.Time
  23.     fPerm       os.FileMode
  24. }
  25.  
  26. type F struct {
  27.     files []*sysFile
  28. }
  29.  
  30. func (self *F) visit(path string, f os.FileInfo, err error) error {
  31.     if ( f == nil ) {
  32.         return err
  33.     }
  34.     var tp int
  35.     if f.IsDir() {
  36.         tp = IsDirectory
  37.     }else if (  f.Mode() & os.ModeSymlink ) > 0 {
  38.         tp = IsSymlink
  39.     }else{
  40.         tp = IsRegular
  41.     }
  42.     inoFile := &sysFile{
  43.         fName : path,
  44.         fType : tp,
  45.         fPerm : f.Mode(),
  46.         fMtime: f.ModTime(),
  47.         fSize : f.Size(),
  48.     }
  49.     self.files = append( self.files, inoFile )
  50.     return nil
  51. }
  52.  
  53.  
  54. func main() {
  55.     flag.Parse()
  56.     root := flag.Arg(0)
  57.     self := F{
  58.         files: make( []*sysFile, 0 ),
  59.     }
  60.     err := filepath.Walk(root, func(path string, f os.FileInfo, err error) error {
  61.         return self.visit(path, f, err)
  62.     })
  63.  
  64.     if err != nil {  
  65.       fmt.Printf("filepath.Walk() returned %v\n", err)
  66.     }
  67.  
  68.     for _, v := range self.files {
  69.         fmt.Println( v.fName,v.fSize )
  70.     }
  71. }
  72.  
  73. //go/5660

回复 "Golang: 扫描目录并获取相关信息"

这儿你可以回复上面这条便签

captcha