zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    jQuery中jsonp的跨域处理,no access-control-allow-origin,unexpected token
    doT中嵌套for循环的使用
    c++ new带括号和不带括号
    python装饰器之使用情景分析
    Python中classmethod与staticmethod区别
    python作用域 scope
    duck type鸭子类型
    EAFP和LBYL 两种防御性编程风格
    c++重载、覆盖和隐藏
    c++ 名字粉碎(name mangling)
  • 原文地址:https://www.cnblogs.com/yinzhengjie2020/p/12543829.html
Copyright © 2011-2022 走看看