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語言開發(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)建)
這篇文章主要為大家詳細(xì)介紹了如何通過Golang實現(xiàn)一個linux命令ls命令(命令行工具構(gòu)建),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的可以了解一下2023-01-01go語言實戰(zhàn)之實現(xiàn)比特幣地址校驗步驟
這篇文章主要介紹了go語言實戰(zhàn)之實現(xiàn)比特幣地址校驗步驟,利用生產(chǎn)的隨機數(shù)采用橢圓加密算法生成公鑰,具體步驟實例代碼請參考下本文2021-05-05