TreeviewCopyright © aleen42 all right reserved, powered by aleen42

os是golang针对操作系统适配的系统调用的使用的工具包这篇文章主要介绍的File包的使用

OpenFile

先介绍OpenFile这个方法是因为其他方法都是调用这个方法去完成

import (
    "fmt"
    "os"
    "reflect"
)

func main() {
    f, _ := os.OpenFile("test.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)
    defer f.Close()
    fmt.Println(f.Stat())
}

O_RDWR也就是说用读写的权限,O_CREATE如果文件存在则忽略, 不存则创建,O_TRUNC文件存在截取长度为0,就是会覆盖更新 总共的读写权限包括

    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   // 打开IO同步
    O_TRUNC  int = syscall.O_TRUNC  // 截断打开

Create

Create是创建文件的函数


import (
    "fmt"
    "os"
    "reflect"
)

func main() {
    f, _ := os.Create("test.txt")
    defer f.Close()
    fmt.Println(reflect.ValueOf(f).Type()) //*os.File
}

上面的方法Create方法本质就是

func Create(name string) (*File, error) {
    return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
}

就是通过OpenFile去创建问题。

Open

这个方法容易让人入坑的,因为这个方法是以只读打开文件的

import (
    "fmt"
    "os"
)

func main() {
f, _ := os.Open("widuu_2.go")
    defer f.Close()
    fmt.Println(f.Stat())
}

深入看一下Open这个方法。

func Open(name string) (*File, error) {
    return OpenFile(name, O_RDONLY, 0)
}

它是只读的方式打开的,如果此时你write的方式写是不会报错的,但是不会写入成功的

Stat

Stat这个方式检查文件的属性

import (
    "fmt"
    "os"
)

func main() {
    f, _ := os.Stat("1.go")
    fmt.Println(f.Size())
}

补充一个通过Stat判断文件或者路径是否存在

func PathExist(_path string) bool {
    _, err := os.Stat(_path)
    if err != nil && os.IsNotExist(err) {
        return false
    }
    return true
}

results matching ""

    No results matching ""