一.基础文件操作:
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) {
// 权限不足
}
评论前必须登录!
注册