This commit is contained in:
Liang Ding 2014-10-11 14:45:44 +08:00
parent dba18c5458
commit 4ceabaa75e
1 changed files with 40 additions and 2 deletions

View File

@ -429,7 +429,7 @@ func removeFile(path string) bool {
// 在 dir 指定的目录(包含子目录)中的 extension 指定后缀的文件中搜索包含 text 文本的文件,类似 grep/findstr 命令. // 在 dir 指定的目录(包含子目录)中的 extension 指定后缀的文件中搜索包含 text 文本的文件,类似 grep/findstr 命令.
func search(dir, extension, text string, snippets []*Snippet) []*Snippet { func search(dir, extension, text string, snippets []*Snippet) []*Snippet {
f, _ := os.Open(dir) f, _ := os.Open(dir)
fi, err := f.Readdir(-1) fileInfos, err := f.Readdir(-1)
f.Close() f.Close()
if nil != err { if nil != err {
@ -438,11 +438,49 @@ func search(dir, extension, text string, snippets []*Snippet) []*Snippet {
return snippets return snippets
} }
_ = fi for _, fileInfo := range fileInfos {
name := fileInfo.Name()
path := dir + name
if fileInfo.IsDir() { // 进入目录递归
search(path, extension, text, snippets)
} else if strings.HasSuffix(name, extension) { // 在文件中进行搜索
ss := searchInFile(path, text)
snippets = append(snippets, ss...)
}
}
return snippets return snippets
} }
// 在 path 指定的文件内容中搜索 text 指定的文本.
func searchInFile(path string, text string) []*Snippet {
ret := []*Snippet{}
bytes, err := ioutil.ReadFile(path)
if nil != err {
glog.Errorf("Read file [%s] failed: [%s]", path, err.Error())
return ret
}
content := string(bytes)
lines := strings.Split(content, "\n")
for idx, line := range lines {
ch := strings.Index(line, text)
if -1 != ch {
snippet := &Snippet{Path: path, Line: idx + 1, Ch: ch + 1, Contents: []string{line}}
ret = append(ret, snippet)
}
}
return ret
}
// 根据文件名后缀判断是否是图片文件. // 根据文件名后缀判断是否是图片文件.
func isImg(extension string) bool { func isImg(extension string) bool {
ext := strings.ToLower(extension) ext := strings.ToLower(extension)