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
    }
    

  • 相关阅读:
    git功能速查
    iPad actionsjeet
    iOS开发中集成Reveal
    【转】ios内联函数 inline
    【转】数据存储——APP 缓存数据线程安全问题探讨
    iOS 改变导航栏高度
    ios 闪屏页的设置
    AFNetworking content type not support
    iOS 获取本地文件的各种坑
    iOS UICollectionView 长按移动cell
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6937155.html
Copyright © 2011-2022 走看看