美文网首页
golang中文件以及文件夹路径相关操作

golang中文件以及文件夹路径相关操作

作者: 东京的雨不会淋湿首尔 | 来源:发表于2019-11-20 17:03 被阅读0次

    获取目录中所有文件

    使用包:
    io/ioutil

    使用方法:
    ioutil.ReadDir
    读取目录 dirmane 中的所有目录和文件(不包括子目录)
    返回读取到的文件的信息列表和读取过程中遇到的任何错误
    返回的文件列表是经过排序的

    FileInfo

    type FileInfo interface {
            Name() string       // base name of the file
            Size() int64        // length in bytes for regular files; system-dependent for others
            Mode() FileMode     // file mode bits
            ModTime() time.Time // modification time
            IsDir() bool        // abbreviation for Mode().IsDir()
            Sys() interface{}   // underlying data source (can return nil)
    }
    

    代码:

    package main
    
    import (
        "fmt"
        "io/ioutil"
    )
    
    func main() {
        myfolder := `d:\go_workspace\`
    
        files, _ := ioutil.ReadDir(myfolder)
        for _, file := range files {
            if file.IsDir() {
                continue
            } else {
                fmt.Println(file.Name())
            }
        }
    }
    

    获取目录以及子目录中所有文件

    在上面代码的基础上,使用递归,遍历所有的文件夹和子文件夹。

    代码:

    package main
    
    import (
        "fmt"
        "io/ioutil"
    )
    
    func main() {
        myfolder := `d:\go_workspace\`
        listFile(myfolder)
    }
    
    func listFile(myfolder string) {
        files, _ := ioutil.ReadDir(myfolder)
        for _, file := range files {
            if file.IsDir() {
                listFile(myfolder + "/" + file.Name())
            } else {
                fmt.Println(myfolder + "/" + file.Name())
            }
        }
    }
    

    获取执行文件所在目录

    代码1:
    使用包:
    path/filepath
    os

    package main
    
    import (
        "fmt"
        "log"
        "os"
        "path/filepath"
    )
    
    func main() {
        dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(dir)
    }
    

    代码2:
    使用包:
    path/filepath
    os

    package main
    
    import (
        "fmt"
        "os"
        "path/filepath"
    )
    
    func main() {
        ex, err := os.Executable()
        if err != nil {
            panic(err)
        }
        exPath := filepath.Dir(ex)
        fmt.Println(exPath)
    }
    

    代码3:
    使用包:
    os

    package main
    
    import (
        "fmt"
        "os"
    )
    
    func main() {
        pwd, err := os.Getwd()
        if err != nil {
            fmt.Println(err)
            os.Exit(1)
        }
        fmt.Println(pwd)
    }
    

    代码4:
    使用包:
    path/filepath

    package main
    
    import (
        "fmt"
        "path/filepath"
    )
    
    func main() {
    
        fmt.Println(filepath.Abs("./"))
    }
    

    代码5:
    第三方库:https://github.com/kardianos/osext

    package main
    
    import (
        "fmt"
        "log"
    
        "github.com/kardianos/osext"
    )
    
    func main() {
        folderPath, err := osext.ExecutableFolder()
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(folderPath)
    }
    

    显示所有文件夹、子文件夹、文件、子文件

    使用包:
    path/filepath
    os

    package main
    
    import (
        "fmt"
        "os"
        "path/filepath"
    )
    
    func visit(path string, f os.FileInfo, err error) error {
        fmt.Printf("Visited: %s\n", path)
        return nil
    }
    
    func main() {
        root := `d:\go_workspace\`
        err := filepath.Walk(root, visit)
        fmt.Printf("filepath.Walk() returned %v\n", err)
    }
    
    

    获取文件夹中所有文件以及文件的大小

    使用包:
    path/filepath
    os

    package main
    
    import (
        "fmt"
        "os"
        "path/filepath"
    )
    
    func main() {
        dirname := "." + string(filepath.Separator)
        d, err := os.Open(dirname)
        if err != nil {
            fmt.Println(err)
            os.Exit(1)
        }
        defer d.Close()
        fi, err := d.Readdir(-1)
        if err != nil {
            fmt.Println(err)
            os.Exit(1)
        }
        for _, fi := range fi {
            if fi.Mode().IsRegular() {
                fmt.Println(fi.Name(), fi.Size(), "bytes")
            }
        }
    }
    
    

    重命名文件

    package main
    
    import (
        "log"
        "os"
    )
    
    func main() {
        originalPath := "./test.txt"
        newPath := "test_new.txt"
        err := os.Rename(originalPath, newPath)
        if err != nil {
            log.Fatal(err)
        }
    }
    
    

    重命名文件夹

    package main
    
    import (
        "log"
        "os"
    )
    
    func main() {
        originalPath := "test"
        newPath := "test_new"
        err := os.Rename(originalPath, newPath)
        if err != nil {
            log.Fatal(err)
        }
    }
    
    

    判断某个文件是否存在

    package main
    
    import (
        "fmt"
        "os"
    )
    
    func main() {
        originalPath := "test.txt"
        result := Exists(originalPath)
        fmt.Println(result)
    }
    
    func Exists(name string) bool {
        if _, err := os.Stat(name); err != nil {
            if os.IsNotExist(err) {
                return false
            }
        }
        return true
    }
    
    

    判断某个文件的读写权限

    package main
    
    import (
        "log"
        "os"
    )
    
    func main() {
    
        //Write permission
        file, err := os.OpenFile("./test.txt", os.O_WRONLY, 0666)
        if err != nil {
            if os.IsPermission(err) {
                log.Println("Error: Write permission denied.")
            }
        }
        file.Close()
    
        //Read permission
        file, err = os.OpenFile("./test.txt", os.O_RDONLY, 0666)
        if err != nil {
            if os.IsPermission(err) {
                log.Println("Error: Read permission denied.")
            }
        }
        file.Close()
    }
    
    

    相关文章

      网友评论

          本文标题:golang中文件以及文件夹路径相关操作

          本文链接:https://www.haomeiwen.com/subject/qxzoictx.html