Golang实现文件搜索器


前言

这个搜索器使用到了Golang flag命令行解析,文件夹递归遍历等技能点,用户可以指定搜索的文件夹和文件名。

一、文件搜索器

在使用windows系统时,发现在一个工程中寻找文件比较麻烦,没有Linux的find指令方便。所有,我使用Golang实现了一个类似的文件搜索器,用户可以指定搜索文件名和文件夹。

二、使用步骤

1.查看帮助

.\searchfile.exe -help
Usage of D:\develop\code\go\searchFile\searchfile.exe:
  -d string
        Search directory (default "D:/")
  -f string
        File to search. (default "file.txt")

2.查询文件

输入指令

.\searchfile.exe -d D:/xxx-f GuideExport.h

打印结果

开始搜索...
Fine GuideExport.h in Path: D:/xxx/include
----------------------------------------
Fine GuideExport.h in Path: D:/xxx/xxx/Depend/xxx/xxx
----------------------------------------
Fine GuideExport.h in Path: D:/xxx/xxx/Include
----------------------------------------
搜索结束.

三、代码说明

1.命令行参数解析

Go语言中,flag包支持用户自定义命令行参数。我们使用这个功能读入用户输入的查询文件名和查询文件夹。实现代码如下

var targetFile string
var targetDir string

func init() {
	flag.StringVar(&targetFile, "f", "file.txt", "File to search.")
	flag.StringVar(&targetDir, "d", "D:/", "Search directory")
	flag.Parse()
}

2.递归查询实现

在获取到用户输入的根文件夹后,我们要递归查询这个文件夹和文件夹中的子文件夹。直到遍历所有子文件夹后,我们的查询结束。

func searchFile(filename, dir string) error {
	files, err := ioutil.ReadDir(dir)

	if err != nil {
		return err
	}

	for _, curfile := range files {
		if curfile.IsDir() {
			//找到子文件夹,递归查找
			searchFile(filename, dir+"/"+curfile.Name())
		} else {
			// 找到文件,查看文件名
			resultFlag = true
			if curfile.Name() == filename {
				fmt.Printf("Fine %s in Path: ", targetFile)
				fmt.Println(dir)
				fmt.Println("----------------------------------------")
			}
		}
	}
	return nil
}

四、完整代码

package main

import (
	"flag"
	"fmt"
	"io/ioutil"
)

var targetFile string
var targetDir string
var resultFlag bool

func init() {
	flag.StringVar(&targetFile, "f", "file.txt", "File to search.")
	flag.StringVar(&targetDir, "d", "D:/", "Search directory")
	flag.Parse()
}

func main() {
	fmt.Println("开始搜索...")
	resultFlag = false
	searchFile(targetFile, targetDir)

	if !resultFlag {
		fmt.Println("未搜索到结果.")
	}
	fmt.Println("搜索结束.")
}

func searchFile(filename, dir string) error {
	files, err := ioutil.ReadDir(dir)

	if err != nil {
		return err
	}

	for _, curfile := range files {
		if curfile.IsDir() {
			//找到子文件夹,递归查找
			searchFile(filename, dir+"/"+curfile.Name())
		} else {
			// 找到文件,查看文件名
			resultFlag = true
			if curfile.Name() == filename {
				fmt.Printf("Fine %s in Path: ", targetFile)
				fmt.Println(dir)
				fmt.Println("----------------------------------------")
			}
		}
	}
	return nil
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Source Insight 是一款非常流行的源代码编辑器,具有强大的代码导航和分析功能。它支持多种编程语言,包括 Golang(Go),可以帮助开发者更高效地编写和维护 Golang 代码。 使用 Source Insight 编辑 Golang 代码,首先需要将 Golang 的语法文件导入到 Source Insight 中,以便正确地解析和高亮显示 Golang 代码。然后,可以创建一个新的项目,在项目中导入 Golang 代码文件夹。导入后,Source Insight 将会自动解析代码并生成代码导航树,方便开发者快速浏览和导航代码。 Source Insight 还提供了强大的代码搜索和跳转功能。开发者可以使用快捷键或者鼠标点击来查找变量、函数、类等符号的定义和引用,快速定位到相关的代码位置。此外,Source Insight 还支持符号自动补全和参数提示,可以极大地提高编写代码的效率。 对于 Golang 代码,Source Insight 还提供了一些特定的功能。例如,它可以检测出未使用的变量和未导出的函数,帮助开发者进行代码质量的检查和优化。另外,Source Insight 还可以查找和显示代码中的 TODO 注释,方便开发者追踪和处理遗留的任务。 总的来说,Source Insight 是一款非常实用的源代码编辑器,可以帮助开发者更加高效地编写和维护 Golang 代码。它的强大的代码导航和分析功能,以及针对 Golang 的特定功能,使得开发者能够更加方便地理解和修改代码,提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值