美文网首页
go文件/目录操作整理

go文件/目录操作整理

作者: kilicmu | 来源:发表于2019-10-31 22:23 被阅读0次
新建文件
//函数原型
import os  //以下省略此import
func Create(name string) (*File, error) {
    return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
}
//返回值类型: 返回文件指针与一个错误对象
//文件存在则清空
//ps:文件读写必须判断err是否为nil, 防止读写问题影响程序正确性
文件打开
  • 只读打开(os.Open)
//函数原型:
func Open(name string) (*File, error) {
     return OpenFile(name, O_RDONLY, 0)
}
//Open函数默认以只读打开,此文件指针只可以用来进行文件读, mode为O_RDONLY,
//err类型为*PathError
  • 可控权限打开(os.FileOpen)
//函数原型:
@name: 打开文件的path
@flag: 三种常见模式: os.O_RDONLY, os.O_WRONLY,OS_RDWR  
@perm: 权限: 默认写6
func OpenFile(name string, flag int, perm FileMode) (*File, error) {
    testlog.Open(name)
    f, err := openFileNolog(name, flag, perm)
    if err != nil {
        return nil, err
    }
    f.appendMode = flag&O_APPEND != 0
    return f, nil
}
文件读
  • 最常用: Read
//返回n代表实际读的字节数,Write函数同
func (f *File) Read(b []byte) (n int, err error) { 
    if err := f.checkValid("read"); err != nil {
        return 0, err
    }
    n, e := f.read(b)
    return n, f.wrapErr("read", e)
}
  • 按照行读取
import bufio  //导入bufio包
//读取步骤:
//打开文件
f, err := os.OpenFile("./03-jii.cc", os.O_RDWR, 6)
if err != nil {
    fmt.Println("openerr:", err)
    return
}
defer f.Close()
//创建一个带缓冲区的reader
reader := bufio.NewReader(f)

for {
    //从reader缓冲区读取指定长度数据, 长度取决于dlime参数('\n'按行读)
    buf, err := reader.ReadBytes('\n')
    //通过err!=nil && err == io.EOF判断文件结尾
    //文件结尾标志需要再读取一次EOF标识符
    if err != nil && err == io.EOF {
        fmt.Println("over")
        break
    } else if err != nil{
        fmt.Println("readerr", err)
        return
    }
    fmt.Print(string(buf))
}
写文件
  • 最常用: Write
//函数原型:
func (f *File) Write(b []byte) (n int, err error) {
    if err := f.checkValid("write"); err != nil {
        return 0, err
    }
    n, e := f.write(b)
    if n < 0 {
        n = 0
    }
    if n != len(b) {
        err = io.ErrShortWrite
    }

    epipecheck(f, e)

    if e != nil {
        err = f.wrapErr("write", e)
    }

    return n, err
}

  • 按位置写
    Seek函数--->操作文件的指针位置
@offset 从指定位置偏移量(>0正向, <0逆向)
@whence: io.SeekStart //起始位置
         io.SeekCurrent  //当前位置
         io.SeekEnd   //结尾
func (f *File) Seek(offset int64, whence int) (ret int64, err error)

指定位置写

@b 写入的字符切片
@off Seek修改定位后的返回值,或io自带位置宏
func (f *File) WriteAt(b []byte, off int64) (n int, err error)
  • 按字符串写
//函数原型:
//传入字符串,传出写入字符串长与err
func (f *File) WriteString(s string) (n int, err error) {
    return f.Write([]byte(s))
}
目录操作
  • 目录打开:
    同使用OpenFile,第三个参数传入os.ModeDir
  • 目录读取ReadDir:
//  函数原型:
@n 获取目录项个数, -1表示全部目录项
func (f *File) Readdir(n int) ([]FileInfo, error) {
    if f == nil {
        return nil, ErrInvalid
    }
    return f.readdir(n)
}

//FileInfo 文件描述接口:
type FileInfo interface {
    Name() string       // base name of the file
    Size() int64        // length in bytes for regular files; system-dependent for others
    Mode() FileMode     // file mode bits
    ModTime() time.Time // modification time
    IsDir() bool        // abbreviation for Mode().IsDir()
    Sys() interface{}   // underlying data source (can return nil)
}

相关文章

  • go文件/目录操作整理

    新建文件 文件打开 只读打开(os.Open) 可控权限打开(os.FileOpen) 文件读 最常用: Read...

  • vscode使用指南(文件快速导航)

    编写文件操作 快速打开文件目录列表 go to Definition go to type definition ...

  • Mac shell使用技巧总结

    整理了常用的Mac使用技巧 1.文件操作 常用目录 资源库 目录 文件操作 选择操作 文件编辑 将文件转成 HTM...

  • 《Go语言四十二章经》第三十一章 文件操作与IO

    《Go语言四十二章经》第三十一章 文件操作与IO 作者:李骁 31.1 文件系统 对于文件和目录的操作,Go主要在...

  • Golang 文件操作

    参考Golang文件操作整理golang中的文件读写 一、API 参考Go语言学习笔记(五)文件操作 1.os.F...

  • 06-Go语言命令行参数

    GO命令行操作指令 标准go语言项目文件目录格式项目文件夹就是GOPATH指向的文件夹src文件夹是专门用于存放源...

  • 07-Go语言命令行参数-指趣学院

    go命令行操作指令 标准go语言项目文件目录格式项目文件夹就是GOPATH指向的文件夹src文件夹是专门用于存放源...

  • golang File 对象封装

    今天拿 Go 完成一个小操作,把一个多层的目录下的 jpg 文件全部检索出来,但是发现 go 原生的文件 api ...

  • os.File

    Go标准库os包提供了操纵操作系统的能力 对于文件和目录的操作,Go提供两种类型分别是os.File结构和os.F...

  • 文件和目录处理相关

    文件和目录处理相关 题: 考点:文件操作/写入操作; 延伸:目录操作函数,其他文件操作; 文件读写操作 文件系统函...

网友评论

      本文标题:go文件/目录操作整理

      本文链接:https://www.haomeiwen.com/subject/vyqxbctx.html