Go 文件处理

文件处理
创建于:2020年08月16日

文件操作的大多数函数都是在os包里面

目录操作

创建目录

func Mkdir(name string, perm FileMode) error

创建名称为name的目录,权限设置是perm,例如0777。

package main

import (
    "fmt"
    "os"
)

func main(){
    err := os.Mkdir("readme", 0777)

    if err != nil{
        fmt.Println(err)
    }
}

// 当目录存在时报错:
// mkdir readme: Cannot create a file when that file already exists.

创建多级目录

func MkdirAll(path string, perm FileMode) error

根据path创建多级子目录

package main

import (
    "fmt"
    "os"
)

func main(){
    // 目录存在不会报错
    err := os.MkdirAll("readme/first/second", 0777)

    if err != nil{
        fmt.Println(err)
    }
}

删除目录/文件

func Remove(name string) error

删除名称为name的目录,当目录下有文件或者其他目录会出错。

package main

import (
    "fmt"
    "os"
)

func main(){
    err := os.Remove("readme")

    if err != nil{
        fmt.Println(err)
    }
}
// 删除不为空的目录:remove readme: The directory is not empty.

删除多级目录

func RemoveAll(path string) error

删除path(包括)及其下级子目录。

package main

import (
    "fmt"
    "os"
)

func main(){
    err := os.RemoveAll("readme")

    if err != nil{
        fmt.Println(err)
    }
}

文件操作

创建文件

func Create(name string) (file *File, err Error)

根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666的文件,返回的文件对象是可读写的

package main

import (
    "fmt"
    "os"
)

func main(){
    file, err := os.Create("readme.txt")

    if err != nil{
        fmt.Println(err)
    }
    fmt.Println(file) // &{0xc0000cc780}
}

如果文件已经存在则会删除源文件重新创建

打开文件

func OpenFile(name string, flag int, perm uint32) (file *File, err Error)

打开名称为name的文件,flag是打开的方式:只读、读写等,perm是权限。

flag 标签如下

const (
    O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
    O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件
    O_RDWR   int = syscall.O_RDWR   // 读写模式打开文件
    O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
    O_CREATE int = syscall.O_CREAT  // 如果不存在将创建一个新文件
    O_EXCL   int = syscall.O_EXCL   // 和O_CREATE配合使用,文件必须不存在
    O_SYNC   int = syscall.O_SYNC   // 打开文件用于同步I/O
    O_TRUNC  int = syscall.O_TRUNC  // 如果可能,打开时清空文件
)
func Open(name string) (file *File, err Error)

该方法打开一个名称为name的文件,但是只读方式,内部实现调用了OpenFile。

写文件

写入byte类型的信息到文件

func (file *File) Write(b []byte) (n int, err Error)

在指定位置开始写入byte类型的信息。

func (file *File) WriteAt(b []byte, off int64) (n int, err Error)

写入string信息到文件。

func (file *File) WriteString(s string) (ret int, err Error)

读文件

读取数据到b中

func (file *File) Read(b []byte) (n int, err Error)

从off开始读取数据到b中。

func (file *File) ReadAt(b []byte, off int64) (n int, err Error)