Golang的文本文件处理-目录操作常见的API

          Golang的文本文件处理-目录操作常见的API

                               作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

  上一篇笔记我分享了文件相关的API操作,我们知道读写的文件一般存放于目录中。因此,有时需要指定到某一个目录下,根据目录存储的状况在进行文件的特定操作,接下来我们就看看目录的基本操作方法。

 

一.读取目录内容

package main

import (
    "fmt"
    "os"
)

func main() {

    /**
      如下所示,打开目录和打开文件的函数是同一个函数哟:
          func OpenFile(name string, flag int, perm FileMode) (*File, error)

      函数签名各个参数解释如下:
          name:
              表示要打开的目录名称。使用绝对路径较多
          flag:
              表示打开目录的读写模式,通常传:O_RDONLY(只读模式)
          perm:
              表示打开权限。但对于目录来说略有不同。通常传os.ModeDir。
          返回值:
              由于是操作目录,所以file是指向目录的文件指针(*File)。
              error中保存错误信息。
    */
    f, err := os.OpenFile("E:\yinzhengjie\input", os.O_RDONLY, os.ModeDir)

    if err != nil {
        fmt.Println("目录打开失败: ", err)
        return
    }
    defer f.Close()

    /**
        Readdir函数的函数签名如下:
            func (f *File) Readdir(n int) ([]FileInfo, error)

        函数签名各个参数解释如下:
            n:
                Readdir读取与文件关联的目录的内容,并按目录顺序返回由Lstat返回的最多n个FileInfo值组成的片段。对同一文件的后续调用将产生更多的文件信息。
                如果n>0,Readdir最多返回n个FileInfo结构。在这种情况下,如果Readdir返回一个空片段,它将返回一个非nil错误来解释原因。在目录的末尾,错误是io.EOF。
                如果n<=0,Readdir将在一个切片中返回目录中的所有文件信息。在这种情况下,如果Readdir成功(一直读取到目录的末尾),则返回切片和nil错误。如果在目录结束之前遇到错误,Readdir将返回在该点之前读取的FileInfo和非nil错误。
返回值: 返回两个值,一个是读取到的文件信息切片对象("[]FileInfo"),另一个是错误信息("error") 温馨提示: FileInfo中可以获取到问问你家的名称,大小,权限,修改时间,是否是目录等。
*/ files, err := f.Readdir(-100) if err != nil { fmt.Println("错误信息: ", err) return } for _, file := range files { fmt.Printf("文件名称是: %s,文件大小是:%d,是否是目录:%t ", file.Name(), file.Size(), file.IsDir()) } }

二.修改当前工作目录

package main

import (
    "fmt"
    "os"
)

func main() {

    /**
    修改当前的工作目录,类似于linux操作系统中的cd命令。
    */
    os.Chdir("E:\yinzhengjie\input")

    /**
    "."表示指定路径为当前路径,".."表示指定路径为当前路径的上级路径
    */
    f, err := os.OpenFile("..", os.O_RDONLY, os.ModeDir)

    if err != nil {
        fmt.Println("目录打开失败: ", err)
        return
    }
    defer f.Close()

    files, err := f.Readdir(-100)
    if err != nil {
        fmt.Println("错误信息: ", err)
        return
    }

    for _, file := range files {
        fmt.Printf("文件名称是: %s,文件大小是:%d,是否是目录:%t
", file.Name(), file.Size(), file.IsDir())
    }
}

 

三.获取当前路径

package main

import (
    "fmt"
    "os"
)

func main() {

    /**
    获取当前的工作路径
    */
    pwd, _ := os.Getwd()
    fmt.Println(pwd)

    /**
    修改当前的工作目录,类似于linux操作系统中的cd命令。
    */
    os.Chdir("E:\yinzhengjie\input")

    pwd, _ = os.Getwd()
    fmt.Println(pwd)
}

 

四.创建目录

package main

import (
    "os"
)

func main() {

    /**
    切换工作路径
    */
    os.Chdir("E:\yinzhengjie\input")

    /**
    切换到指定的工作路径后创建bigdata目录
    */
    os.Mkdir("bigdata", 0755)

}

五.其它常用目录操作

  博主推荐阅读:
    https://studygolang.com/pkgdoc
    https://studygolang.com/static/pkgdoc/pkg/os.htm

原文地址:https://www.cnblogs.com/yinzhengjie2020/p/12543829.html