go中对文件和目录的操作主要集中在os包中,下面对go中用到的对文件和目录的操作,做一个总结笔记。在go中的文件和目录涉及到两种类型,一个是 type File struct,另一个是type Fileinfo interface,来看下这两种类型的定义:
一、 type File struct 的定义
type File struct { *file // os specific } type file struct { fd int name string dirinfo *dirInfo // nil unless directory being read }
二、type Fileinfo interface 的定义
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) }
三、文件标志
const (
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 // 打开文件用于同步I/O
O_TRUNC int = syscall.O_TRUNC // 如果可能,打开时清空文件
)
# 并非文件权限。
三、常用构建type File的方法
清楚了解File 和 FileInfo的定义后,接下来对他们的用法就比较容易理解和记住了。
1、func Create(name string) (file *File, err error)
函数原型:
OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
创建文件,该方法只能创建文件。从原型中可以看出,创建权限为0666、名称为name的文件,文件标志为可读写、可创建、内容清空。
Tips 1:如果文件已存在,则返回文件打开的标识,但并不修改文件权限。
Tips 2:文件创建权限不一致,请参考:Go新建文件权限与设置不符
file , _ := os.Create("./aaaa") file , _ = os.Create("/data/wanda/go/src/test/bbbb")
2、func Open(name string) (file *File, err error)
函数原型:
OpenFile(name, O_RDONLY, 0)
以只读模式打开。
3、func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
OpenFile是一个更一般性的文件打开函数,大多数调用者都应用Open或Create代替本函数。它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型是*PathError。
4、func NewFile(fd uintptr, name string) *File
NewFile使用给出的Unix文件描述符和名称创建一个文件。
5、func Pipe() (r *File, w *File, err error)
Pipe返回一对关联的文件对象。从r的读取将返回写入w的数据。本函数会返回两个文件对象和可能的错误。