[golang] golang文件读写 os.OpenFile(fileName,os.O_APPEND|os.O_WRONLY,os.ModeAppend)
读写文件要用到的OS包
代码语言:javascript复制func OpenFile(name string, flag int, perm FileMode) (*File, error)
该方法第一个参数为文件路径,第二个参数控制文件的打开方式,第三个参数控制文件模式
可用的打开方式有
代码语言:javascript复制// Flags to OpenFile wrapping those of the underlying system. Not all
// flags may be implemented on a given system.
const (
// Exactly one of O_RDONLY, O_WRONLY, or O_RDWR must be specified.
// 只读模式
O_RDONLY int = syscall.O_RDONLY // open the file read-only.
// 只写模式
O_WRONLY int = syscall.O_WRONLY // open the file write-only.
// 可读可写
O_RDWR int = syscall.O_RDWR // open the file read-write.
// The remaining values may be or'ed in to control behavior.
// 追加内容
O_APPEND int = syscall.O_APPEND // append data to the file when writing.
// 创建文件,如果文件不存在
O_CREATE int = syscall.O_CREAT // create a new file if none exists.
// 与创建文件一同使用,文件必须存在
O_EXCL int = syscall.O_EXCL // used with O_CREATE, file must not exist.
// 打开一个同步的文件流
O_SYNC int = syscall.O_SYNC // open for synchronous I/O.
// 如果可能,打开时缩短文件
O_TRUNC int = syscall.O_TRUNC // truncate regular writable file when opened.
)
打开模式
代码语言:javascript复制// The defined file mode bits are the most significant bits of the FileMode.
// The nine least-significant bits are the standard Unix rwxrwxrwx permissions.
// The values of these bits should be considered part of the public API and
// may be used in wire protocols or disk representations: they must not be
// changed, although new bits might be added.
const (
// The single letters are the abbreviations
// used by the String method's formatting.
// 文件夹模式
ModeDir FileMode = 1 << (32 - 1 - iota) // d: is a directory
// 追加模式
ModeAppend // a: append-only
// 单独使用
ModeExclusive // l: exclusive use
// 临时文件
ModeTemporary // T: temporary file; Plan 9 only
// 象征性的关联
ModeSymlink // L: symbolic link
// 设备文件
ModeDevice // D: device file
// 命名管道
ModeNamedPipe // p: named pipe (FIFO)
// Unix 主机 socket
ModeSocket // S: Unix domain socket
// 设置uid
ModeSetuid // u: setuid
// 设置gid
ModeSetgid // g: setgid
// UNIX 字符串设备,当设备模式是设置unix
ModeCharDevice // c: Unix character device, when ModeDevice is set
// 粘性的
ModeSticky // t: sticky
// 非常规文件;对该文件一无所知
ModeIrregular // ?: non-regular file; nothing else is known about this file
// bit位遮盖,不变的文件设置为none
// Mask for the type bits. For regular files, none will be set.
ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice | ModeCharDevice | ModeIrregular
// 权限位
ModePerm FileMode = 0777 // Unix permission bits
)
创建一个文件并追加内容
代码语言:javascript复制package main
import (
"os"
)
func main() {
fname := "/tmp/t.txt"
f, err := os.OpenFile(fname, os.O_CREATE|os.O_RDWR|os.O_APPEND, os.ModeAppend|os.ModePerm)
if err != nil {
fmt.Println(err)
}
f.WriteString("test")
f.Close()
}
删除文件
os.Remove(fname)
创建目录
dname :="/tmp/d" os.Mkdir(dname,os.ModeDir|os.ModePerm)
创建完整目录路径,即中间目录不存在的话也一起创建
代码语言:javascript复制os.MkdirAll(dname,os.ModeDir|os.ModePerm)
golang os.OpenFile几种常用模式
os.O_WRONLY | os.O_CREATE | O_EXCL 【如果已经存在,则失败】
os.O_WRONLY | os.O_CREATE 【如果已经存在,会覆盖写,不会清空原来的文件,而是从头直接覆盖写】
os.O_WRONLY | os.O_CREATE | os.O_APPEND 【如果已经存在,则在尾部添加写】