最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang復(fù)制文件夾移動到另一個文件夾實現(xiàn)方法詳解

 更新時間:2023年07月05日 12:00:33   作者:七鏡  
這篇文章主要為大家介紹了golang復(fù)制文件夾并移動到另一個文件夾實現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、背景

最近在寫自動化配置程序(七鏡將來會將其開源),網(wǎng)上沒找著簡單明了的實現(xiàn)復(fù)制文件夾到另一個文件夾的golang實現(xiàn)方法,于是七鏡自己實現(xiàn)了一個。

二、源代碼

package main
import (
    "log"
    "os"
    "regexp"
    "strings"
)
func main() {
    // 調(diào)用 CopyDir 函數(shù),將源文件夾下的所有文件和子文件夾拷貝到目標(biāo)文件夾
    count, err := CopyDir("E:\\personal\\golang\\config\\webserver", ".\\output")
    if err != nil {
        log.Fatal(err)
    }
    log.Println(count)
}
// CopyDir 函數(shù)接受兩個字符串參數(shù),分別表示源文件夾和目標(biāo)文件夾的路徑
// 返回值是拷貝的文件數(shù)量和可能發(fā)生的錯誤
func CopyDir(src, dst string) (count int, err error) {
    // 使用正則表達(dá)式將路徑按照 / 或 \ 分割成切片
    regexp1, err := regexp.Compile(`(/|\\)`)
    if err != nil {
        return 0, err
    }
    srcSplits := regexp1.Split(src, 10000)
    dstSplits := regexp1.Split(dst, 10000)
    // 調(diào)用 CopyDirInner 函數(shù),傳入源文件夾和目標(biāo)文件夾的前綴和最后一級名稱
    return CopyDirInner(strings.Join(srcSplits[:len(srcSplits)-1], "/"), srcSplits[len(srcSplits)-1], strings.Join(dstSplits[:len(dstSplits)-1], "/"), dstSplits[len(dstSplits)-1])
}
// CopyDirInner 函數(shù)接受四個字符串參數(shù),分別表示源文件夾和目標(biāo)文件夾的前綴和最后一級名稱
// 返回值是拷貝的文件數(shù)量和可能發(fā)生的錯誤
func CopyDirInner(srcPrefix, src string, dstPrefix, dst string) (count int, err error) {
    // 如果前綴為空,則設(shè)置為當(dāng)前目錄
    if srcPrefix == "" {
        srcPrefix = "."
    }
    if dstPrefix == "" {
        dstPrefix = "."
    }
    // 讀取源文件夾下的所有文件和子文件夾
    dirs, err := os.ReadDir(srcPrefix + "/" + src)
    if err != nil {
        return 0, err
    }
    // 在目標(biāo)文件夾下創(chuàng)建同名的子文件夾
    pathCursor := dstPrefix + "/" + dst + "/" + src
    err = os.MkdirAll(pathCursor, 0600)
    if err != nil {
        return 0, err
    }
    for _, dir := range dirs {
        if dir.IsDir() {
            // 如果是子文件夾,則遞歸調(diào)用 CopyDirInner 函數(shù),傳入相應(yīng)的參數(shù)
            countSub, err := CopyDirInner(srcPrefix+"/"+src, dir.Name(), dstPrefix+"/"+dst, src)
            if err != nil {
                return 0, err
            }
            count += countSub
        } else {
            // 如果是文件,則讀取其內(nèi)容,并寫入到目標(biāo)文件夾下同名的文件中
            bytesFile, err := os.ReadFile(srcPrefix + "/" + src + "/" + dir.Name())
            if err != nil {
                return 0, err
            }
            err = os.WriteFile(pathCursor+"/"+dir.Name(), bytesFile, 0600)
            if err != nil {
                return 0, err
            }
            count++
        }
    }
    return count, nil
}

三、實現(xiàn)原理

  • 輸入源文件夾路徑,目標(biāo)文件夾路徑,實現(xiàn)一個函數(shù)迭代源文件夾路徑中的所有文件和目錄;
  • 如果是目錄則繼續(xù)遞歸調(diào)用這個函數(shù);
  • 如果是文件,就將文件復(fù)制到目標(biāo)文件夾路徑下。

以上就是golang復(fù)制文件夾并移動到另一個文件夾實現(xiàn)方法詳解的詳細(xì)內(nèi)容,更多關(guān)于golang復(fù)制文件夾的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Go語言中的作用域和變量隱藏

    詳解Go語言中的作用域和變量隱藏

    這篇文章主要為大家介紹了Go語言中的作用域和變量隱藏,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Go語言有一定的幫助,感興趣的小伙伴可以了解一下
    2022-04-04
  • 詳解如何利用Golang泛型提高編碼效率

    詳解如何利用Golang泛型提高編碼效率

    Golang的泛型已經(jīng)出來有一段時間了,大家應(yīng)該或多或少對它有所了解。雖然Golang的泛型在功能上確實比較簡單,而且確實可能會增加代碼的復(fù)雜度,過度使用可能還會降低代碼可讀性。本文就來介紹一下Golang泛型的相關(guān)知識吧
    2023-04-04
  • Go常問的一些面試題匯總(附答案)

    Go常問的一些面試題匯總(附答案)

    通常我們?nèi)ッ嬖嚳隙〞行┎诲e的Golang的面試題目的,所以總結(jié)下,讓其他Golang開發(fā)者也可以查看到,同時也用來檢測自己的能力和提醒自己的不足之處,這篇文章主要給大家介紹了關(guān)于Go常問的一些面試題以及答案的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • Go Resiliency庫中timeout實現(xiàn)原理及源碼解析

    Go Resiliency庫中timeout實現(xiàn)原理及源碼解析

    Go-Resiliency庫中的timeout是一種基于協(xié)程的超時機(jī)制,通過創(chuàng)建協(xié)程來執(zhí)行任務(wù)并設(shè)置超時時間,若任務(wù)執(zhí)行時間超時則中止協(xié)程并返回錯誤,需要詳細(xì)了解可以參考下文
    2023-05-05
  • go語言定時器Timer及Ticker的功能使用示例詳解

    go語言定時器Timer及Ticker的功能使用示例詳解

    這篇文章主要為大家介紹了go語言定時器的功能使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • Golang?IOT中的數(shù)據(jù)序列化與解析過程

    Golang?IOT中的數(shù)據(jù)序列化與解析過程

    這篇文章主要介紹了Golang?IOT中的數(shù)據(jù)序列化與解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • 深入解析Go語言中crypto/subtle加密庫

    深入解析Go語言中crypto/subtle加密庫

    本文主要介紹了深入解析Go語言中crypto/subtle加密庫,詳細(xì)介紹crypto/subtle加密庫主要函數(shù)的用途、工作原理及實際應(yīng)用,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Golang的繼承模擬實例

    Golang的繼承模擬實例

    這篇文章主要介紹了Go語言使用組合的方式實現(xiàn)多繼承的方法,實例分析了多繼承的原理與使用組合方式來實現(xiàn)多繼承的技巧,需要的朋友可以參考下,希望可以幫助到你
    2021-06-06
  • 基于Go語言實現(xiàn)類似tree命令的小程序

    基于Go語言實現(xiàn)類似tree命令的小程序

    tree?命令是一個小型的跨平臺命令行程序,用于遞歸地以樹狀格式列出或顯示目錄的內(nèi)容。本文將通過Go語言實現(xiàn)類似tree命令的小程序,需要的可以參考一下
    2022-10-10
  • Golang AGScheduler動態(tài)持久化任務(wù)調(diào)度的強大庫使用實例

    Golang AGScheduler動態(tài)持久化任務(wù)調(diào)度的強大庫使用實例

    這篇文章主要為大家介紹了Golang AGScheduler動態(tài)持久化任務(wù)調(diào)度的強大庫使用實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10

最新評論

仲巴县| 龙口市| 泽库县| 罗山县| 华宁县| 梁河县| 丹东市| 宝应县| 上杭县| 松滋市| 前郭尔| 阿克苏市| 太保市| 盐亭县| 张家口市| 南皮县| 梅河口市| 黔西| 独山县| 三明市| 石台县| 青龙| 资阳市| 阆中市| 偃师市| 河曲县| 广东省| 连南| 杭州市| 曲阳县| 莫力| 江北区| 德昌县| 洮南市| 治多县| 吉木乃县| 鲁甸县| 子长县| 鄯善县| 石楼县| 陇西县|