章节

14.6 文件打开方式和权限

本篇学习 os.OpenFile 的常见 flag 与权限参数,并能实现追加写入。

文件打开方式和权限

概念说明

os.OpenFile 可以精细控制文件打开方式。
例如只读、只写、创建、追加、清空等。

第三个参数是文件权限。
权限通常用八进制写法,例如 0644 表示文件所有者可读写,其他用户可读。

语法/规则

  1. os.O_RDONLY 表示只读。
  2. os.O_WRONLY 表示只写。
  3. os.O_RDWR 表示读写。
  4. os.O_CREATE 表示文件不存在时创建。
  5. os.O_APPEND 表示追加写入。
  6. os.O_TRUNC 表示打开时清空原内容。
  7. 多个 flag 使用 | 组合。

追加写入示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main

import (
	"fmt"
	"os"
)

func main() {
	path := "app.log"
	file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) // 创建文件并以追加方式写入
	if err != nil {
		panic(err)
	}
	defer os.Remove(path)
	defer file.Close()

	_, err = file.WriteString("line1\n") // 追加一行文本
	if err != nil {
		panic(err)
	}

	data, err := os.ReadFile(path)
	if err != nil {
		panic(err)
	}
	fmt.Print(string(data))
}

输出结果:

1
line1

常见错误

  1. 忘记加 os.O_CREATE,文件不存在时打开失败。
  2. 需要追加写却使用 os.O_TRUNC,导致原内容被清空。
  3. 权限写成十进制 644,应写成八进制 0644
  4. 打开文件后忘记关闭,导致内容未及时刷新或文件句柄泄漏。
本文禁止转载
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
最近构建时间:2026-04-17 19:07:48 CST
载入天数...载入时分秒...
发表了 1 篇文章 · 发表了 152 篇笔记 · 总计 18 万 0 千字