Golang实现文件搜索器

  • 前言
  • 一、文件搜索器
  • 二、使用步骤
    • 1.查看帮助
    • 2.查询文件
  • 三、代码说明
    • 1.命令行参数解析
    • 2.递归查询实现
  • 四、完整代码

前言

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

一、文件搜索器

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

二、使用步骤

1.查看帮助

.\searchfile.exe -help
Usage of D:\develop\code\go\searchFile\searchfile.exe:-d stringSearch directory (default "D:/")-f stringFile 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 stringfunc 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 = trueif curfile.Name() == filename {fmt.Printf("Fine %s in Path: ", targetFile)fmt.Println(dir)fmt.Println("----------------------------------------")}}}return nil
}

四、完整代码

package mainimport ("flag""fmt""io/ioutil"
)var targetFile string
var targetDir string
var resultFlag boolfunc init() {flag.StringVar(&targetFile, "f", "file.txt", "File to search.")flag.StringVar(&targetDir, "d", "D:/", "Search directory")flag.Parse()
}func main() {fmt.Println("开始搜索...")resultFlag = falsesearchFile(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 = trueif curfile.Name() == filename {fmt.Printf("Fine %s in Path: ", targetFile)fmt.Println(dir)fmt.Println("----------------------------------------")}}}return nil
}

Golang实现文件搜索器相关推荐

  1. 在哪里能收到python实例代码-python仿evething的文件搜索器实例代码

    今天看到everything搜索速度秒杀windows自带的文件管理器,所以特地模仿everything实现了文件搜索以及打开对应文件的功能,首先来一张搜索对比图. 这是evething搜索效果: 这 ...

  2. android文件搜索器

    哈哈哈哈,皇天不负苦心人啊,作为一个安卓初学者,经过三天自学,终于写出文件搜索器来了,下一步,我要写一个在安卓上运行的lucene!package android.search; import jav ...

  3. python 遍历listbox_Python仿evething的文件搜索器 !

    今天看到everything搜索速度秒杀windows自带的文件管理器,所以特地模仿everything实现了文件搜索以及打开对应文件的功能,首先来一张搜索对比图. 这是evething搜索效果: P ...

  4. java编写一个文件查找器

    我们学过文件File之后就想写一个文件搜索器我写了两个版本的搜索器,第一个是基于控制台的就是我的查找结果要显示在控制台上,这个比较适合初学者学习,另外我又写了一个基于界面的文件搜索器,用起来比较好看, ...

  5. gorm preload 搜索_8种最佳免费文件搜索工具

    一个免费的文件搜索工具听起来确实像是一个免费软件可在您的计算机上搜索文件.这些免费文件搜索工具是可靠的程序,其中许多功能比计算机现在内置的搜索功能强大. 如果您一直习惯在计算机上命名和组织成百上千个( ...

  6. elementui如何在input 框中搜索_在 Windows 10 中的文件资源管理器中删除搜索历史记录...

    Windows 资源管理器带有搜索功能,用户可以通过该功能找到特定的文件或文件夹.默认情况下,您在搜索框中进行的所有搜索都会保存到其历史记录中.下次您在搜索框中输入内容时,它将在下拉对话框中显示最近输 ...

  7. php搜索文件名,php实现按文件名搜索文件的远程文件查找器

    对于本地,我们可以利用windows自带的查找去进行查找,但是对于线上的话,如查找ftp空间里面文件,本程序是很有用的. 使用效果: php文件查找器源码: . 代码如下: php版文件查找(file ...

  8. 怎么在Windows11上禁用文件资源管理器搜索历史记录

    Win11系统是现在非常火热的电脑操作系统,但是Win11上的一些新功能很多用户还是很清楚,最近有用户问如何在Windows11上禁用文件资源管理器搜索历史记录?下面小编就为大家简单介绍一下,快来看看 ...

  9. 《Total Commander:万能文件管理器》——第6.2节.文件搜索

    本节书摘来自异步社区<Total Commander:万能文件管理器>一书中的第6章,第6.2节,作者 张玉新,更多章节内容可以访问云栖社区"异步社区"公众号查看. 第 ...

最新文章

  1. Recover Binary Search Tree
  2. [Python]小甲鱼Python视频第32课(except)课后题及参考解答
  3. 只想多吃,而不考虑能吃掉多少——如何恰到好处的按需进度规划?
  4. Pytesseract的安装与使用。pip安装完Pytesseract报错不能用的解决方案【笔记自用】
  5. 操作系统页面置换算法实验报告
  6. 简单介绍一下Java常用的五大框架!
  7. Facebook哭晕在厕所,调查显示用VR体验社交的用户仅为19%
  8. js 加入debug后可以进入controller_写给前端的 Nest.js 教程——10分钟上手后端接口开发
  9. python多线程写同一个文件_Python多线程快速写入文件,python,飞速
  10. 【zabbix解决value too small or too large】
  11. 零偏,零偏稳定性和零偏重复性,IMU误差模型
  12. Android使用SSL自签名证书
  13. 《开源公开课分享》:Java开源框架案例分享
  14. jmeter接口压力测试详解
  15. 2017计算机四级网络工程师,2017计算机四级网络工程师真题练习
  16. Shell脚本之IP验证
  17. Modelsim仿真实验
  18. 吉林大学计算机孙磊,室内灯光控制系统设计毕业论文.doc
  19. xss-labs通关大详解
  20. 纯CSS 红砖背景墙

热门文章

  1. APT仓库目录和repository目录结构
  2. 第五章 数组Ivor Horton
  3. FailedScheduling 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn‘t tolerat
  4. 感恩节,感谢大家的一路相伴
  5. Nginx 入门指南(二)
  6. 粘胶活化剂市场现状及未来发展趋势
  7. 一个新手的评价---人机交互方面(有些不搭题
  8. 云服务器ECS常见的计费方式
  9. 输入框添加Emoje表情demo
  10. 我支持平板能代替笔记本电脑