go语言实现遍历目录,及查找特定的文件类型

sn-dnv-aps · · 9808 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
 1 // filelist.go
 2 package main
 3 
 4 import (
 5     //"flag"
 6     "fmt"
 7     "os"
 8     "path/filepath"
 9     "strings"
10 )
11 
12 var (
13     ostype = os.Getenv("GOOS") // 获取系统类型
14 )
15 
16 var listfile []string //获取文件列表
17 
18 func Listfunc(path string, f os.FileInfo, err error) error {
19     var strRet string
20     strRet, _ = os.Getwd()
21     //ostype := os.Getenv("GOOS") // windows, linux
22 
23     if ostype == "windows" {
24         strRet += "\\"
25     } else if ostype == "linux" {
26         strRet += "/"
27     }
28 
29     if f == nil {
30         return err
31     }
32     if f.IsDir() {
33         return nil
34     }
35 
36     strRet += path //+ "\r\n"
37 
38     //用strings.HasSuffix(src, suffix)//判断src中是否包含 suffix结尾
39     ok := strings.HasSuffix(strRet, ".go")
40     if ok {
41 
42         listfile = append(listfile, strRet) //将目录push到listfile []string中
43     }
44     //fmt.Println(ostype) // print ostype
45     fmt.Println(strRet) //list the file
46 
47     return nil
48 }
49 
50 func getFileList(path string) string {
51     //var strRet string
52     err := filepath.Walk(path, Listfunc) //
53 
54     if err != nil {
55         fmt.Printf("filepath.Walk() returned %v\n", err)
56     }
57 
58     return " "
59 }
60 
61 func ListFileFunc(p []string) {
62     for index, value := range p {
63         fmt.Println("Index = ", index, "Value = ", value)
64     }
65 }
66 
67 func main() {
68     //flag.Parse()
69     //root := flag.Arg(0)
70     //fmt.Println()
71     var listpath string
72     fmt.Scanf("%s", &listpath)
73     getFileList(listpath)
74     ListFileFunc(listfile)
75     //getFileList(root)
76 
77 }

运行效果如下:

 1 Administrator@WIN7-20131114US /cygdrive/e/golang_test/FolderList
 2 $ ./filelist
 3 .
 4 E:\golang_test\FolderList\.git\COMMIT_EDITMSG
 5 E:\golang_test\FolderList\.git\HEAD
 6 E:\golang_test\FolderList\.git\config
 7 E:\golang_test\FolderList\.git\description
 8 E:\golang_test\FolderList\.git\hooks\applypatch-msg.sample
 9 E:\golang_test\FolderList\.git\hooks\commit-msg.sample
10 E:\golang_test\FolderList\.git\hooks\post-update.sample
11 E:\golang_test\FolderList\.git\hooks\pre-applypatch.sample
12 E:\golang_test\FolderList\.git\hooks\pre-commit.sample
13 E:\golang_test\FolderList\.git\hooks\pre-rebase.sample
14 E:\golang_test\FolderList\.git\hooks\prepare-commit-msg.sample
15 E:\golang_test\FolderList\.git\hooks\update.sample
16 E:\golang_test\FolderList\.git\index
17 E:\golang_test\FolderList\.git\info\exclude
18 E:\golang_test\FolderList\.git\logs\HEAD
19 E:\golang_test\FolderList\.git\logs\refs\heads\master
20 E:\golang_test\FolderList\.git\logs\refs\remotes\origin\master
21 E:\golang_test\FolderList\.git\objects\26\1859e5deb5e8b620e8effcdddbd76f749f89db
22 E:\golang_test\FolderList\.git\objects\3d\8e579829a9d9f604604e81f008f536da785a0a
23 E:\golang_test\FolderList\.git\objects\8d\362f848a2be8746747bf8377ed0db288a30fa7
24 E:\golang_test\FolderList\.git\objects\97\26e0fab404ab3ee9886b2e319df56326ac8874
25 E:\golang_test\FolderList\.git\objects\aa\a29dfb8415b1fefcfe4eddd799b0fc516c3f8a
26 E:\golang_test\FolderList\.git\objects\db\cbdce2e9c70e4023594cee8e4fefe9d5394934
27 E:\golang_test\FolderList\.git\objects\e2\51918e7226b197e8ad32cbe30c61ddbd262f9a
28 E:\golang_test\FolderList\.git\objects\ff\f5e740d47a1451f7d778de8016ebb3dd6c58dd
29 E:\golang_test\FolderList\.git\refs\heads\master
30 E:\golang_test\FolderList\.git\refs\remotes\origin\master
31 E:\golang_test\FolderList\README.md
32 E:\golang_test\FolderList\filelist.exe
33 E:\golang_test\FolderList\filelist.go
34 Index =  0 Value =  E:\golang_test\FolderList\filelist.go

 

本文来自:博客园

感谢作者:sn-dnv-aps

查看原文:go语言实现遍历目录,及查找特定的文件类型

入群交流(和以上内容无关):Go中文网 QQ 交流群:798786647 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

9808 次点击  
加入收藏 微博
下一篇:golang 扫雷
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传