Go实战--golang中文件以及文件夹路径相关操作

来源:互联网 发布:win7下安装mac双系统 编辑:程序博客网 时间:2024/04/30 18:30

生命不止,继续 go go go!!!

之前介绍过golang的标准库:path/filepath, os

Go语言学习之path/filepath包(the way to go)

Go语言学习之os包中文件相关的操作(The way to go)

今天就跟大家分享几个关于文件以及文件夹的相关操作。

获取目录中所有文件

使用包:
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 mainimport (    "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 mainimport (    "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 mainimport (    "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 mainimport (    "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 mainimport (    "fmt"    "os")func main() {    pwd, err := os.Getwd()    if err != nil {        fmt.Println(err)        os.Exit(1)    }    fmt.Println(pwd)}

代码4:
使用包:
path/filepath

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

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

package mainimport (    "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 mainimport (    "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 mainimport (    "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 mainimport (    "log"    "os")func main() {    originalPath := "./test.txt"    newPath := "test_new.txt"    err := os.Rename(originalPath, newPath)    if err != nil {        log.Fatal(err)    }}

重命名文件夹

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

判断某个文件是否存在

package mainimport (    "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 mainimport (    "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()}

这里写图片描述

原创粉丝点击