美文网首页
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中文件以及文件夹路径相关操作

    获取目录中所有文件 使用包:io/ioutil 使用方法:ioutil.ReadDir读取目录 dirmane 中...

  • dos常用命令

    操作文件夹: dir 列出当前控制台所在的路径下的所有文件以及文件夹。 cd 路径 进入指定的路径下。 ...

  • 常见的dos命令

    操作文件夹: dir 列出当前控制台所在的路径下的所有文件以及文件夹。 cd 路径 进入指定的路径下。...

  • Golang 学习笔记(08)—— 文件操作

    本文为转载,原文:Golang 学习笔记(08)—— 文件操作 path 在path包中封装了一些路径相关的操作,...

  • (五) IOS学习之--NSFileManager

    今天学习文件/文件夹相关操作,主要有path路径操作和NSFileManager文件管理器.以下学习过程均是以ma...

  • java基础——File类

    File类 File类用来操作文件路径或文件夹路径,将文件和文件夹路径封装成对象,以提供更多的方法和属性来操作这些...

  • iOS开发之常用路径及文件操作方法

    1.常用的路径方法 2.文件操作相关方法 1. 判断文件/文件夹是否存在 2. 创建文件 3. 创建文件夹(相比创...

  • C# 文件相关操作

    一、文件夹 1.选择文件夹 2.文件夹相关操作 C#文件夹相关操作主要使用Directory类和Directory...

  • Python文件以及文件夹相关操作

    获取目录下所有后缀名称 上面的这个函数用到了os.walk这个函数,它主要功能是遍历当前目录,并且返回三个元组,(...

  • Jmeter+ant+jenkins生成测试报告

    Ant 配置以及运行效果 创建Test文件夹(注:空文件夹,尽量路径不要有中文) ant 文件夹中是装ant的安装...

网友评论

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

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