Go中的os包之目录和文件(file)的操作

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的数据。本函数会返回两个文件对象和可能的错误。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>