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

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

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

一、背景

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

三、實(shí)現(xiàn)原理

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

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

相關(guān)文章

  • Go語言學(xué)習(xí)之Switch語句的使用

    Go語言學(xué)習(xí)之Switch語句的使用

    這篇文章主要通過一些示例為大家介紹一下Go語言中Switch語句的基本語法以及使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-06-06
  • Golang實(shí)現(xiàn)自己的Redis數(shù)據(jù)庫內(nèi)存實(shí)例探究

    Golang實(shí)現(xiàn)自己的Redis數(shù)據(jù)庫內(nèi)存實(shí)例探究

    這篇文章主要為大家介紹了Golang實(shí)現(xiàn)自己的Redis數(shù)據(jù)庫內(nèi)存實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Go語言開發(fā)編程規(guī)范命令風(fēng)格代碼格式

    Go語言開發(fā)編程規(guī)范命令風(fēng)格代碼格式

    這篇文章主要為大家介紹了Go語言開發(fā)編程規(guī)范命令風(fēng)格代碼格式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go語言超時退出的三種實(shí)現(xiàn)方式總結(jié)

    Go語言超時退出的三種實(shí)現(xiàn)方式總結(jié)

    這篇文章主要為大家詳細(xì)介紹了Go語言中超時退出的三種實(shí)現(xiàn)方式,文中的示例代碼簡潔易懂,對我們深入了解Go語言有一定的幫助,需要的可以了解一下
    2023-06-06
  • Go語言簡介和環(huán)境配置

    Go語言簡介和環(huán)境配置

    Go語言保證了既能到達(dá)靜態(tài)編譯語言的安全和性能,又達(dá)到了動態(tài)語言開發(fā)速度和易維護(hù)性,有人形容Go語言:Go=?C?+?Python?,?說明Go語言既有C靜態(tài)語言程序的運(yùn)行速度,又能達(dá)到Python動態(tài)語言的快速開發(fā),這篇文章主要介紹了Go介紹和環(huán)境配置,需要的朋友可以參考下
    2022-07-07
  • Web框架Gin中間件實(shí)現(xiàn)原理步驟解析

    Web框架Gin中間件實(shí)現(xiàn)原理步驟解析

    這篇文章主要為大家介紹了Web框架Gin中間件實(shí)現(xiàn)原理步驟解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Go中各種newreader和newbuffer的使用總結(jié)

    Go中各種newreader和newbuffer的使用總結(jié)

    這篇文章主要為大家詳細(xì)介紹了Go語言中各種newreader和newbuffer的使用的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的參考價值,感興趣的小伙伴可以了解下
    2023-11-11
  • Golang異常處理之優(yōu)雅地控制和處理異常

    Golang異常處理之優(yōu)雅地控制和處理異常

    在Golang中,異常處理是非常重要的一部分,能夠有效地控制和處理代碼中的異常情況。通過Golang的異常處理機(jī)制,可以優(yōu)雅地捕獲和處理異常,保障代碼的可靠性和穩(wěn)定性。同時,Golang還提供了豐富的工具和API,幫助開發(fā)者更加輕松地進(jìn)行異常處理
    2023-04-04
  • Go語言json編碼駝峰轉(zhuǎn)下劃線、下劃線轉(zhuǎn)駝峰的實(shí)現(xiàn)

    Go語言json編碼駝峰轉(zhuǎn)下劃線、下劃線轉(zhuǎn)駝峰的實(shí)現(xiàn)

    這篇文章主要介紹了Go語言json編碼駝峰轉(zhuǎn)下劃線、下劃線轉(zhuǎn)駝峰的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Go語言的文件名、標(biāo)識符、關(guān)鍵字和包基礎(chǔ)教程

    Go語言的文件名、標(biāo)識符、關(guān)鍵字和包基礎(chǔ)教程

    Go的關(guān)鍵字不能被用作標(biāo)識符,這是一個重要的限制,以避免命名沖突和語法混淆,這篇文章主要給大家介紹了關(guān)于Go語言文件名、標(biāo)識符、關(guān)鍵字和包的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06

最新評論