zoukankan      html  css  js  c++  java
  • 用Go语言写了一个电脑搜索文件的小东西

    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
    }
    

  • 相关阅读:
    LeetCode344. 反转字符串
    LeetCode59. 螺旋矩阵 II
    LeetCode209. 长度最小的子数组
    LeetCode383. 赎金信
    cannot be cast to javax.servlet.Servlet
    求组合
    数据库系统概论王珊第四版 答案
    数据库复习
    dfs-bfs
    dfs
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6937155.html
Copyright © 2011-2022 走看看