前言

Golang

首先我们在 Golang 官网,查找 os 文档

Index(索引)

文件操作

创建文件:

Create 文件不存在时,则使用模式0666创建该文件;文件存在则被清空

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

打开文件

Open 打开将打开命名文件以供读取。如果成功,则可以使用返回文件上的方法进行读取。关联的文件描述符的模式为O_RDONLY。如果有错误,它将是* PathError类型。

func Open(name string) (*File, error)

OpenFile 打开带有指定标志(O_RDONLY等)的命名文件。如果该文件不存在,并且传递了O_CREATE标志,则使用模式perm(在umask之前)创建该文件。

func OpenFile(name string, flag int, perm FileMode) (*File, error)

写文件

perm

func WriteFile(name string, data []byte, perm FileMode) error

读文件:

Read 读取从文件中读取多达len(b)个字节。它返回读取的字节数和遇到的任何错误。在文件末尾,Read返回0,即io.EOF。

func (f *File) Read(b []byte) (n int, err error)

删除文件

Remove 删除将删除命名文件或(空)目录。如果有错误,它将是* PathError类型。

os.Remove(filename)

删除文件夹及其包含的所有子目录和所有文件

RemoveAll RemoveAll删除路径及其包含的所有子代。如果路径不存在,则RemoveAll返回nil(无错误)

os.RemoveAll(dir)

检查文件是否存在

Stat 方法返回文件描述信息 IsNotExist 则确认是否已知该错误以报告文件或目录不存在

func FileIsExisted(filename string) bool {
	existed := true
	if _, err := os.Stat(filename); os.IsNotExist(err) {
		existed = false
	}
	return existed
}

使用os.Read()和os.Write() 复制文件

func CopyFile3(src, des string, bufSize int) (written int64, err error) {
    if bufSize <= 0 {
        bufSize = 1*1024*1024   //1M
    }
    buf := make([]byte, bufSize)
 
    srcFile, err := os.Open(src)
    if err != nil {
        return 0, err
    }
    defer srcFile.Close()
 
    //获取源文件的权限
    fi, _ := srcFile.Stat()
    perm := fi.Mode()
 
    desFile, err := os.OpenFile(des, os.O_CREATE|os.O_RDWR|os.O_TRUNC, perm)
    if err != nil {
        return 0, err
    }
    defer desFile.Close()
 
    count := 0
    for {
        n, err := srcFile.Read(buf)
        if err != nil && err != io.EOF {
            return 0, err
        }
 
        if n == 0 {
            break
        }
 
        if wn, err := desFile.Write(buf[:n]); err != nil {
            return 0, err
        } else {
            count += wn
        }
    }
 
    return int64(count), nil
}