Go 文件操作


package main

import (
    "fmt"
    "os"
    "strconv"
)

func main() {
    // 打开文件 返回文件指针
    file, error := os.Open("/tmp/1.txt")
    if error != nil {
        fmt.Println(error)
    }
    fmt.Println(file)
    file.Close()

    // 以读写方式打开文件 返回文件指针 如果不存在则创建
    file2, error := os.OpenFile("/tmp/2.txt", os.O_RDWR|os.O_CREATE, 0644)
    if error != nil {
        fmt.Println(error)
    }
    fmt.Println(file2)
    file2.Close()

    // 创建文件 Create 函数也是调用的 OpenFile
    file3, error := os.Create("/tmp/3.txt")
    if error != nil {
        fmt.Println(error)
    }
    fmt.Println(file3)
    file3.Close()

    // 读取文件内容
    file4, error := os.Open("/tmp/1.txt")
    if error != nil {
        fmt.Println(error)
    }
    // 创建 byte 的 slice 用于接收文件读取数据
    buf := make([]byte, 1024)
    // 循环读取
    for {
        // Read 函数会改变文件当前偏移量
        len, _ := file4.Read(buf)
        // 读取字节数为 0 时跳出循环
        if len == 0 {
            break
        }
        fmt.Println(string(buf))
    }
    file4.Close()

    // 读取文件内容
    file5, error := os.Open("/tmp/1.txt")
    if error != nil {
        fmt.Println(error)
    }
    buf2 := make([]byte, 1024)
    ix := 0
    for {
        // ReadAt 从指定的偏移量开始读取,不会改变文件偏移量
        len, _ := file5.ReadAt(buf2, int64(ix))
        ix = ix + len
        if len == 0 {
        break
        }
        fmt.Println(string(buf2))
    }
    file5.Close()

    // 写入文件
    file6, error := os.Create("/tmp/4.txt")
    if error != nil {
        fmt.Println(error)
    }
    data := "This is data\r\n"
    for i := 0; i < 10; i++ {
        // 写入 byte 的 slice 数据
        file6.Write([]byte(data))
        // 写入字符串
        file6.WriteString(data)
    }
    file6.Close()

    // 写入文件
    file7, error := os.Create("/tmp/5.txt")
    if error != nil {
        fmt.Println(error)
    }
    for i := 0; i < 10; i++ {
        // 按指定偏移量写入数据
        ix := i * 64
        file7.WriteAt([]byte("This is data"+strconv.Itoa(i)+"\r\n"), int64(ix))
    }
    file7.Close()

    // 删除文件
    del := os.Remove("/tmp/1.txt")
    if del != nil {
        fmt.Println(del)
    }

    // 删除指定 path 下的所有文件
    delDir := os.RemoveAll("/tmp/testdir")
    if delDir != nil {
            fmt.Println(delDir)
    }
}
分享:

评论