欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go實現(xiàn)自動復(fù)制U盤小工具demo

 更新時間:2023年12月25日 10:56:10   作者:南丞?PFinalClub  
這篇文章主要為大家介紹了go實現(xiàn)自動復(fù)制U盤小工具demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

自動復(fù)制U盤小工具

最近在折騰 golang 寫了一個 關(guān)于 電腦 插入U盤后會自動復(fù)制U盤中的內(nèi)容的 小工具, 但是 技術(shù)有限,出現(xiàn)了一下問題,放出代碼聽聽大家的意見

代碼如下

package main
import (
  "io"
  "strings"
  "os"
  "path/filepath"
  "fmt"
  "strconv"
  "syscall"
  "golang.org/x/sys/windows/registry"
)
// 獲取插入的U盤盤符
func GetUDisk() []string {
    //查詢注冊表,判斷是否插入U盤
    k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SYSTEM\CurrentControlSet\Services\USBSTOR\Enum`, registry.QUERY_VALUE)
    if err != nil {
        fmt.Println("Not have U-Disk")
        return nil
    }
    defer k.Close()
    // 獲取注冊表中值,得到插入了幾個U盤
    count, _, err := k.GetIntegerValue("Count")
    // 獲取全部盤符
    disks := GetSystemDisks()
    return disks[len(disks)-int(count):]
}
//遞歸復(fù)制目錄
func copyDir(src string, dest string)  {
  src_original := src
  err := filepath.Walk(src, func(src string, f os.FileInfo, err error) error {
    if f == nil {
      return err
    }
    if f.IsDir() {
      //      fmt.Println(f.Name())
      //copyDir(f.Name(), dest+"/"+f.Name())
    } else {
      //fmt.Println(src)
      //fmt.Println(src_original)
      //fmt.Println(dest)
      dest_new := strings.Replace(src, src_original, dest, -1)
      //fmt.Println(dest_new)
      //fmt.Println("CopyFile:" + src + " to " + dest_new)
      CopyFile(src, dest_new)
    }
    //println(path)
    return nil
  })
  if err != nil {
    //fmt.Printf("filepath.Walk() returned %v\n", err)
  }
}
// 拷貝文件
func CopyFile(src, dst string) (w int64, err error) {
  srcFile, err := os.Open(src)
  if err != nil {
    fmt.Println(err.Error())
    return
  }
  defer srcFile.Close()
  //fmt.Println("dst:" + dst)
  dst_slices := strings.Split(dst, "\\")
  dst_slices_len := len(dst_slices)
  dest_dir := ""
  for i := 0; i < dst_slices_len-1; i++ {
    dest_dir = dest_dir + dst_slices[i] + "\\"
  }
  //dest_dir := getParentDirectory(dst)
  //fmt.Println("dest_dir:" + dest_dir)
  b, err := PathExists(dest_dir)
  if b == false {
    err := os.Mkdir(dest_dir, os.ModePerm) //在當(dāng)前目錄下生成md目錄
    if err != nil {
      fmt.Println(err)
    }
  }
  dstFile, err := os.Create(dst)
  if err != nil {
    fmt.Println(err.Error())
    return
  }
  defer dstFile.Close()
  return io.Copy(dstFile, srcFile)
}
func getFilelist(path string) {
  err := filepath.Walk(path, func(path string, f os.FileInfo, err error) error {
    if f == nil {
      return err
    }
    if f.IsDir() {
      return nil
    }
    //println(path)
    return nil
  })
  if err != nil {
    //fmt.Printf("filepath.Walk() returned %v\n", err)
  }
}
func PathExists(path string) (bool, error) {
  _, err := os.Stat(path)
  if err == nil {
    return true, nil
  }
  if os.IsNotExist(err) {
    return false, nil
  }
  return false, err
}
func main() {
  if len(GetUDisk()) <= 0 {
    fmt.Println("沒有插入U盤")
    return
  }
  for _, v := range  GetUDisk() {
    fmt.Println(v + "\\")
    copyDir(v + "\\",v + ":\\go_copy")
  }
}

問題缺點

上面的代碼現(xiàn)在遇到的問題是:

U盤文件太多或者太大就會出現(xiàn)電腦卡死

遞歸復(fù)制耗時比較多

以上就是go實現(xiàn)自動復(fù)制U盤的詳細(xì)內(nèi)容,更多關(guān)于go自動復(fù)制U盤的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go 中 slice 的 In 功能實現(xiàn)探索

    Go 中 slice 的 In 功能實現(xiàn)探索

    這篇文章主要介紹了Go 中 slice 的 In 功能實現(xiàn)探索,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Golang圖片驗證碼的使用方法

    Golang圖片驗證碼的使用方法

    最近在使用到Golang進(jìn)行原生開發(fā),注冊和登錄頁面都涉及到圖片驗證碼的功能,支持很多類型的驗證方式,例如支持?jǐn)?shù)字類型、字母類型、音頻驗證碼、中文驗證碼,本文給大家介紹Golang圖片驗證碼的使用,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • 在Go語言開發(fā)中實現(xiàn)高性能的分布式日志收集的方法

    在Go語言開發(fā)中實現(xiàn)高性能的分布式日志收集的方法

    本文介紹了在Go語言開發(fā)中實現(xiàn)高性能分布式日志收集的關(guān)鍵步驟和考慮因素,包括日志生成與采集、日志傳輸、日志收集器的高性能網(wǎng)絡(luò)I/O、日志存儲與分析、監(jiān)控與告警系統(tǒng)、擴展性與可維護(hù)性等方面,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-01-01
  • 通過Golang實現(xiàn)linux命令ls命令(命令行工具構(gòu)建)

    通過Golang實現(xiàn)linux命令ls命令(命令行工具構(gòu)建)

    這篇文章主要為大家詳細(xì)介紹了如何通過Golang實現(xiàn)一個linux命令ls命令(命令行工具構(gòu)建),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的可以了解一下
    2023-01-01
  • Go中的代碼換行問題

    Go中的代碼換行問題

    這篇文章主要介紹了Go中的代碼換行問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Go語言中字符串賦值中的問題與解決方法

    Go語言中字符串賦值中的問題與解決方法

    這篇文章主要為大家詳細(xì)介紹了Go語言中字符串賦值會出現(xiàn)的一些問題以及解決方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2024-12-12
  • 詳解golang中發(fā)送http請求的幾種常見情況

    詳解golang中發(fā)送http請求的幾種常見情況

    這篇文章主要介紹了詳解golang中發(fā)送http請求的幾種常見情況,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 使用Go語言編寫一個NTP服務(wù)器的流程步驟

    使用Go語言編寫一個NTP服務(wù)器的流程步驟

    NTP服務(wù)器【Network?Time?Protocol(NTP)】是用來使計算機時間同步化的一種協(xié)議,為了確保封閉局域網(wǎng)內(nèi)多個服務(wù)器的時間同步,我們計劃部署一個網(wǎng)絡(luò)時間同步服務(wù)器(NTP服務(wù)器),本文給大家介紹了使用Go語言編寫一個NTP服務(wù)器的流程步驟,需要的朋友可以參考下
    2024-11-11
  • 解決golang http.FileServer 遇到的坑

    解決golang http.FileServer 遇到的坑

    這篇文章主要介紹了解決golang http.FileServer 遇到的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • go語言實戰(zhàn)之實現(xiàn)比特幣地址校驗步驟

    go語言實戰(zhàn)之實現(xiàn)比特幣地址校驗步驟

    這篇文章主要介紹了go語言實戰(zhàn)之實現(xiàn)比特幣地址校驗步驟,利用生產(chǎn)的隨機數(shù)采用橢圓加密算法生成公鑰,具體步驟實例代碼請參考下本文
    2021-05-05

最新評論