文件操作

os 包提供了平台无关的操作系统功能接口。尽管错误处理是 go 风格的,但设计是 Unix 风格的;所以,失败的调用会返回 error 而非错误码。通常 error 里会包含更多信息。例如,如果使用一个文件名的调用(如 Open、Stat)失败了,打印错误时会包含该文件名,错误类型将为 *PathError,其内部可以解包获得更多信息。

os 包规定为所有操作系统实现的接口都是一致的。有一些某个系统特定的功能,需要使用 syscall 获取。实际上,os 依赖于 syscall。在实际编程中,我们应该总是优先使用 os 中提供的功能,而不是 syscall

带缓冲读取

package main

import (
    "bufio"
    "fmt"
    "io"
    "os"
)

func main() {
    file, err := os.Open("/Users/yangsx/Desktop/helloworld.txt") // 返回一个文件对象/文件指针/文件句柄
    defer file.Close() // 关闭File句柄

    if err != nil {
        fmt.Println("open file err: ", err)
    }

    // 创建一个*Reader,默认带大小4096字节的缓冲区
    reader := bufio.NewReader(file)
    // 循环读取文件内容
    for {
        str, err := reader.ReadString('\n') // 读取到换行符就结束
        if err == io.EOF { // 如果读取到文件末尾
            break
        }
        // 输出该行
        fmt.Print(str) // 会把换行符打印
    }
    fmt.Println("----文件读取结束----")
}

一次全文读取

1.16后,ioutil实际上调用os.ReadFile()函数,推荐直接使用os.ReadFile()函数

打开文件的方式

使用func OpenFile(name string, flag int, perm FileMode) (file *File, err error)函数打开文件并指定打开模式:

一次性写入

实际调用os.WriteFile()函数

带缓冲追加写入

覆盖写入

使用选项, os.O_TRUNC 清空文件

判断文件状态

判断文件/文件夹是否存在:

获取文件状态:

文件拷贝

最后更新于

这有帮助吗?