怎么用golang ,把一个文件夹的文档合并,并且只保留合并的go文档?

package main

import (
    "fmt"
    "path/filepath"

    "os"
)//这个是照前面滴帖子写滴

func main() {
    root := "/home/lily/Work/go/src/task"//然后这个是文档的目录
    怎么写把文档的文件合并呢?
        然后删除之前的文件,只保留合并的文件呢?

}

共 4 个回复


jimmykuu

依次打开文件,读出内容,写入到新的文件中,关闭已经打开的文件,并删除之。

# 0

proudlily

嗯,这个伦家好像也想过...但是,不知道肿么写...亲

# 1

jemygraw

@proudlily 来,看看我的例子。 package main

import (
    "bufio"
    "fmt"
    "io"
    "os"
    "path/filepath"
    "strings"
)

func merge(rootPath string) {
    outFileName := "d:\\merge_result.txt"
    outFile, openErr := os.OpenFile(outFileName, os.O_CREATE|os.O_WRONLY, 0600)
    if openErr != nil {
        fmt.Printf("Can not open file %s", outFileName)
    }
    bWriter := bufio.NewWriter(outFile)

    filepath.Walk(rootPath, func(path string, info os.FileInfo, err error) error {
        fmt.Println("Processing:", path)
        //这里是文件过滤器,表示我仅仅处理txt文件
        if strings.HasSuffix(path, ".txt") {
            fp, fpOpenErr := os.Open(path)
            if fpOpenErr != nil {
                fmt.Printf("Can not open file %v", fpOpenErr)
                return fpOpenErr
            }
            bReader := bufio.NewReader(fp)
            for {
                buffer := make([]byte, 1024)
                readCount, readErr := bReader.Read(buffer)
                if readErr == io.EOF {
                    break
                } else {
                    bWriter.Write(buffer[:readCount])
                }
            }
        }
        return err
    })
    bWriter.Flush()
}

func main() {
    var rootPath = "D:\\JemyGraw\\GoProjects\\folder"
    merge(rootPath)
}
# 2

jemygraw

删除的话,你自己加上吧。

# 3