用Go语言写了一个电脑搜索文件的小东西
2024-08-28 07:11:43
package main import (
"bytes"
"fmt"
"os"
"os/exec"
"path/filepath"
"sync"
) type jieguo struct {
go_num int
Lock sync.Mutex
} var searchName string = os.Args[1]
var search_result chan string = make(chan string, 1)
var nums chan int = make(chan int, 1)
var x jieguo = jieguo{go_num: 0} func main() {
list := []string{"D:","E:","F"}
for _, i := range list {
fmt.Println(i, searchName)
go pan(i)
}
for {
select {
case x := <-search_result:
fmt.Println(x)
case y := <-nums:
if y == 0 {
os.Exit(0)
}
}
}
} func pan(path string) {
a := exec.Command("ls", path)
result, e := a.Output()
if e != nil {
fmt.Println(e)
}
z := bytes.Split(result, []byte{10})
for _, i := range z[:len(z)-1] {
s := path + "\\" + string(i)
fmt.Println(s)
e = os.Chdir(s)
if e == nil {
x.Lock.Lock()
x.go_num = x.go_num + 1
x.Lock.Unlock()
go func() {
filepath.Walk(s, walk)
x.Lock.Lock()
x.go_num = x.go_num - 1
nums <- x.go_num
x.Lock.Unlock()
}()
} else {
fmt.Println(e)
if string(i) == searchName {
fmt.Println(s)
}
}
}
} func walk(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if !info.IsDir() && info.Name() == searchName {
search_result <- path
return nil
}
return nil
}
最新文章
- 为C# as 类型转换及Assembly.LoadFrom埋坑!
- CMD的几个常用API
- Android 自定义View 总结
- Adobe Dreamweaver(DW)
- windows下的mysql客户端mysqlworkbench链接虚拟机上CentOS的mysql服务器
- License Manager 10.3启动失败解决方法
- JavaScript prototype 属性
- 【转】图片IMG标记的alt属性和title属性的使用
- (3)java棧
- 页面mask css
- cf C. Divisible by Seven
- mosquitto在Linux环境下的部署/安装/使用/测试
- isset() 与 empty() 的区别
- sed 命令详解
- C++获取系统当前时间
- java编写双色球源代码。-----系统作为彩票双色球生成器,模拟机选一注双色球的彩票号码
- linux Tcpdump使用方法
- .netcore2.1使用swagger显示接口说明文档
- CSS怎么在项目里引入自定义字体(@font-face)
- idea+maven下jrebel的安装破解
热门文章
- JAVA 重载方法,参数为NULL时,调用的处理 (精确性原则)
- 修改UTC时间
- ASP.NET-权限管理五张表
- JSON数据的生成与解析
- Node.js 博客实例(一)简单博客
- 使用默认system_health分析死锁(Deadlock)
- Android应用内加载pdf的方法?
- nyoj--1237--最大岛屿(dfs+数据处理)
- [jzoj 4668] [NOIP2016提高A组模拟7.19] 腐败 解题报告(质数分类+慢速乘)
- express+模板引擎构建项目时遇到的几个小问题