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