云计算百科
云计算领域专业知识百科平台

go语言中os文件类,按类别整理核心操作

一.基础文件操作:

1.文件打开与创建

函数 功能 示例
os.Create() 创建或截断文件 f, err := os.Create("file.txt")
os.Open() 只读方式打开 f, err := os.Open("file.txt")
os.OpenFile() 自定义模式打开 f, err := os.OpenFile(name, os.O_RDWR|os.O_CREATE, 0755)

文件打开模式常量:

os.O_RDONLY // 只读
os.O_WRONLY // 只写
os.O_RDWR // 读写
os.O_APPEND // 追加
os.O_CREATE // 不存在则创建
os.O_EXCL // 与O_CREATE连用,文件必须不存在
os.O_SYNC // 同步I/O
os.O_TRUNC // 打开时清空文件

2.文件读写

方法 功能 示例
(*File).Read() 读取到字节切片 n, err := f.Read(buf)
(*File).ReadAt() 指定位置读取 n, err := f.ReadAt(buf, offset)
(*File).Write() 写入字节切片  n, err := f.Write([]byte("data"))
(*File).WriteString() 写入字符串 n, err := f.WriteString("text")
(*File).WriteAt()  指定位置写入 n, err := f.WriteAt(data, offset)

3.文件定位

方法 功能 示例
(*File).Seek() 移动读写指针 pos, err := f.Seek(10, io.SeekStart)

文件打开模式常量:例如:

io.SeekStart // 文件开头
io.SeekCurrent // 当前位置
io.SeekEnd // 文件末尾

4.文件关闭与同步

方法 功能 示例
(*File).Close() 关闭文件 err := f.Close()
(*File).Sync() 刷盘同步 err := f.Sync()

二.文件信息与属性:

1.获取文件信息

函数/方法 功能 示例
os.Stat() 获取文件信息 fi, err := os.Stat("file.txt")
os.Lstat() 同Stat但不解析链接 fi, err := os.Lstat("symlink")
(*File).Stat() 获取已打开文件信息 fi, err := f.Stat()

FileInfo接口:

type FileInfo interface {
Name() string // 文件名(不含路径)
Size() int64 // 文件大小(字节)
Mode() FileMode // 文件模式
ModTime() time.Time // 修改时间
IsDir() bool // 是否为目录
Sys() interface{} // 底层数据源
}

2.文件属性操作

函数/方法 功能 示例
os.Chmod() 修改权限 err := os.Chmod("file.txt", 0644)
os.Chown()  修改所有者 err := os.Chown("file.txt", uid, gid)
os.Chtimes()  修改时间 err := os.Chtimes("file.txt", atime, mtime)

三.目录操作

1.目录创建与删除

函数 功能 示例
os.Mkdir() 创建单级目录  err := os.Mkdir("dir", 0755)
os.MkdirAll() 递归创建目录 err := os.MkdirAll("a/b/c", 0755)
os.Remove() 删除文件或空目录 err := os.Remove("empty_dir")
os.RemoveAll() 递归删除目录  err := os.RemoveAll("dir")

2.目录遍历

函数 功能 示例
os.ReadDir() 读取目录内容 entries, err := os.ReadDir(".")

DirEntry接口:

type DirEntry interface {
Name() string
IsDir() bool
Type() FileMode
Info() (FileInfo, error)
}

2.获取工作目录

函数 功能 示例
os.Getwd() 获取当前目录  wd, err := os.Getwd()
os.Chdir()  改变当前目录 err := os.Chdir("/tmp")

四.路径处理

标准库path/filepath

函数 功能 示例
filepath.Abs() 获取绝对路径  abs, err := filepath.Abs(".")
filepath.Join() 安全拼接路径 p := filepath.Join("dir", "file.txt")
filepath.Split() 分割目录/文件  dir, file := filepath.Split("/a/b.txt")
filepath.Dir() 获取目录部分 dir := filepath.Dir("/a/b.txt") // "/a"
filepath.Base() 获取文件名部分  file := filepath.Base("/a/b.txt") // "b.txt"
filepath.Ext() 获取扩展名 ext := filepath.Ext("a.txt") // ".txt"
filepath.Glob() 文件通配符匹配 matches, err := filepath.Glob("*.go")
filepath.Walk() 递归遍历目录 err := filepath.Walk(".", walkFn)
filepath.WalkDir() 更高效遍历 err := filepath.WalkDir(".", walkFn)

// 路径处理
import "path/filepath"

// 拼接路径 (跨平台兼容)
path := filepath.Join("dir", "subdir", "file.txt")

// 获取绝对路径
absPath, _ := filepath.Abs("relative/path")

// 获取目录部分
dir := filepath.Dir("/path/to/file.txt") // "/path/to"

// 获取文件名部分
file := filepath.Base("/path/to/file.txt") // "file.txt"

// 获取文件扩展名
ext := filepath.Ext("file.txt") // ".txt"

// 路径遍历
// 递归遍历目录
filepath.Walk("root", func(path string, info os.FileInfo, err error) error {
if !info.IsDir() {
fmt.Println("File:", path)
}
return nil
})

// 模式匹配
matches, _ := filepath.Glob("*.go") // 所有Go文件

五.特殊文件操作

1.临时文件/目录

函数 功能 示例
os.CreateTemp() 创建临时文件 f, err := os.CreateTemp("", "prefix")
os.MkdirTemp() 创建临时目录  dir, err := os.MkdirTemp("", "prefix")

2.符号链接

函数 功能 示例
os.Symlink() 创建符号链接  err := os.Symlink("target", "link")
os.Readlink() 读取链接目标 target, err := os.Readlink("link")

3.硬链接

函数 功能 示例
os.Link() 创建硬链接  err := os.Link("old", "new")

六.高级文件操作

1.文件锁

函数 功能 示例
(*File).Fd() 获取文件描述符 fd := f.Fd()
syscall.Flock() 文件锁(需syscall) err := syscall.Flock(int(fd), syscall.LOCK_EX)

2.内存映射

import "golang.org/x/exp/mmap"

reader, _ := mmap.Open("file.dat")
buf := make([]byte, 1024)
n, _ := reader.ReadAt(buf, 0)

七.便捷函数

1.快速读写

函数 功能 示例
os.ReadFile() 读取整个文件  data, err := os.ReadFile("file.txt")
os.WriteFile() 写入整个文件 err := os.WriteFile("file.txt", data, 0644)

2.文件存在检查

func FileExists(path string) bool {
_, err := os.Stat(path)
return !os.IsNotExist(err)
}

八.错误处理

常见错误类型判断:

if errors.Is(err, os.ErrNotExist) {
// 文件不存在
} else if errors.Is(err, os.ErrExist) {
// 文件已存在
} else if errors.Is(err, os.ErrPermission) {
// 权限不足
}

赞(0)
未经允许不得转载:网硕互联帮助中心 » go语言中os文件类,按类别整理核心操作
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!