zoukankan      html  css  js  c++  java
  • golang中文件以及文件夹路径相关操作

    获取目录中所有文件
    使用包:
    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 ", path)
    return nil
    }

    func main() {
    root := `d:go_workspace\`
    err := filepath.Walk(root, visit)
    fmt.Printf("filepath.Walk() returned %v ", 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()
    }

  • 相关阅读:
    SqlBulkCopy实现大容量数据快速插入数据库中
    防查询语句注入漏洞攻击
    wpf中数据绑定(Datacontext)的应用
    WPF中StackPanel的使用方法
    可空类型的使用《二》
    关于可空数据类型的介绍
    C# 之泛型详解
    C# 之String以及浅拷贝与深拷贝
    C# 小软件部分(二)
    MVC 之HTML辅助方法
  • 原文地址:https://www.cnblogs.com/craneboos/p/9831049.html
Copyright © 2011-2022 走看看