Go语言扫描目录并获取相关信息的方法
程序员文章站
2022-05-26 09:40:25
本文实例讲述了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 )
}
}
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语言程序设计有所帮助。
上一篇: Go语言获取本机逻辑CPU数量的方法