package main

import (
    "fmt"
    "io"
    "os"
)

func Exists(path string) bool {
    _, err := os.Stat(path)
    if err != nil {
        if os.IsExist(err) {
            return true
        }
        return false
    }
    return true
}

func appendToFile(f *os.File, content string) error {
    // 以只写的模式,打开文件

    // 查找文件末尾的偏移量
    n, _ := f.Seek(0, os.SEEK_END)
    // 从末尾的偏移量开始写入内容
    _, err := f.WriteAt([]byte(content), n)

    return err
}

func main() {

    fmt.Printf("Please input a file name to save content:")
    var fileName string
    fmt.Scanln(&fileName)

    if Exists(fileName) {
        os.Remove(fileName)
    }

    f, _ := os.Create(fileName)
    defer f.Close()

    saveContentFile, err := os.OpenFile(fileName, os.O_WRONLY, 0644)
    if err != nil {
        fmt.Println("Save Content file create failed. err: " + err.Error())
    }

    fmt.Printf("Please input the list file dir name:")
    var text string
    fmt.Scanln(&text)
    fmt.Println(text)
    listfileDir, err2 := os.Open(text)
    if err2 != nil {
        panic("Read dir error, [" + err2.Error() + "]")
    }

    readCurrent := func(ch *chan string) {
        defer close(*ch)
        infos, err := listfileDir.Readdir(1000)
        if err != io.EOF {
            for _, info := range infos {
                *ch <- info.Name()
            }
        }

    }

    for i := 0; i < 10000; i++ {
        ch := make(chan string, 1000)
        go readCurrent(&ch)

        for j := 0; j < 1000; j++ {
            content, err := <-ch
            if err != false {
                appendToFile(saveContentFile, content+"\n")
            }
        }
    }

    defer saveContentFile.Close()

}

使用如下语句在Linux系统上面运行,Windows也兼容。


image.png

运行完成之后,查看记录文件。


image.png