Golang 语言的标准库 os 包怎么操作目录和文件?

简介: Golang 语言的标准库 os 包怎么操作目录和文件?

01

介绍

Golang 语言的标准库 os 包提供独立于平台的操作系统相关功能的接口。其设计类似于 Unix,尽管错误处理类似于 Go,调用失败则返回 error 类型的错误,而不是错误编号的值。通常,error 类型的错误中会提供更多信息。

例如 Open 或 Stat,如果返回 error,那么错误将在打印时包含失败的文件名,并且错误类型为 *PathError,可以通过 *PathError 的方法获取更多信息。

type PathError struct {
    Op   string
    Path string
    Err  error
}

os 接口旨在在所有操作系统上保持统一。不通用的功能在系统特定的 syscall 包中实现。

此外,os 包还有三个子包,分别是:

  • os/exec 运行外部命令。
  • os/signal 操作传入的信号。
  • os/user 允许按名称或 ID 查找用户帐户。

但是,本文只介绍 os 包关于目录和文件的操作。

02

函数

os 包提供了很多函数,限于篇幅,我们不会一一介绍,而是主要介绍项目开发中比较常用的关于目录和文件的相关函数。

目录

  • func UserHomeDir() (string, error) 返回当前用户的家目录。
  • func Mkdir(name string, perm FileMode) error 根据给定目录名称和目录权限,创建一个新的目录。
  • func MkdirAll(path string, perm FileMode) error 根据给定目录路径和目录权限,创建所有目录,目录权限作用于被创建的所有目录。
  • func Rename(oldpath, newpath string) error 根据给定的新旧目录名,修改旧目录名,也可用于移动目录。
  • func Remove(name string) error 删除给定名称的文件或空目录。
  • func RemoveAll(path string) error 删除给定路径的所有目录,包含子目录。
  • func Getwd() (dir string, err error) 获取当前的工作目录,如果有多个目录可以到达当前目录,返回任意一个目录。
  • func Chdir(dir string) error 修改当前的工作目录为给定的目录名。

文件

  • func Create(name string) (*File, error) 创建或截断给定文件,如果给定文件已存在,将被截断,如果给定文件不存在,将被创建,并且文件权限为 0666
  • func Open(name string) (*File, error) 打开要读取的文件,文件权限为只读。
  • func OpenFile(name string, flag int, perm FileMode) (*File, error) 根据给定文件名、flag 和文件权限,打开该文件,如果该文件不存在,可以通过 flag 传值 O_CREATE 创建文件,多个 flag 使用 | 分隔,例如 O_CREATE|O_APPEND

03

文件

文件信息 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)
}

FileInfo 接口封装了文件信息相关的方法,可以通过函数 StatLstat 获取 FileInfo。

fi, err := os.Stat("file1.txt")
 if err != nil {
  fmt.Println(err)
  return
 }

文件权限 FileMode

type FileMode uint32

FileMode 可以用于获取文件权限。

获取文件权限的示例代码:

fi, err := f.Stat()
 if err != nil {
  fmt.Println(err)
  return
 }
 fileMode := fi.Mode().String()
 fmt.Println(fileMode)

文件 File

type File struct {
    // contains filtered or unexported fields
}

File 表示打开的文件描述符,它提供了一些操作文件的方法。

关于文件的操作,主要分为打开、关闭和读写,关于打开文件的三种方式,已在 Part 02 函数部分介绍,关闭文件是调用函数 Close,为了防止忘记关闭文件,通常和 defer 搭配使用。

下面主要介绍读写文件。

写文件

  • func (f *File) Write(b []byte) (n int, err error) Write 方法将给定字节切片写入文件。
  • func (f *File) WriteAt(b []byte, off int64) (n int, err error) WriteAt 方法指定文件的字节偏移位置,将给定字节切片写入文件,如果文件是 O_APPEND,WriteAt 返回错误。
  • func (f *File) WriteString(s string) (n int, err error) WriteString 方法使用方式和 Write 方法相同,区别是写入内容由字节切片改为字符串。
  • func (f *File) Truncate(size int64) error 根据给定参数,截断文件。

读文件

  • func (f *File) Read(b []byte) (n int, err error) 读取文件的最大长度的字节。
b := make([]byte, 5)
 n, err := f.Read(b)
 if err != nil {
  fmt.Println(err)
  return
 }
 fmt.Println(b)
 fmt.Println(string(b))
 fmt.Println(n)
  • func (f *File) ReadAt(b []byte, off int64) (n int, err error) 从文件的字节偏移量位置开始读取最大长度的字节
b := make([]byte, 5)
 n, err := f.ReadAt(b, 10)
 if err != nil {
  fmt.Println(err)
  return
 }
 fmt.Println(b)
 fmt.Println(n)
 fmt.Println(string(b))

04

总结

本文主要介绍的是通过 Golang 语言标准库 os 包如何操作目录和文件,此外,os 包还有其他用法,比如操作环境变量。建议感兴趣的读者阅读 os 包的官方文档,了解更多关于 os 包的用法。


目录
相关文章
|
9月前
|
弹性计算 运维 Kubernetes
看阿里云操作系统控制台如何一招擒拿网络丢包
阿里云操作系统控制台帮忙客户快速定位问题,不仅成功完成业务部署并实现稳定运行,更有效遏制了持续性成本消耗。
|
11月前
|
Go
在golang中发起http请求以获取访问域名的ip地址实例(使用net, httptrace库)
这只是追踪我们的行程的简单方法,不过希望你跟着探险家的脚步,即使是在互联网的隧道中,也可以找到你想去的地方。接下来就是你的探险之旅了,祝你好运!
576 26
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
951 11
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
前端开发 JavaScript 开发工具
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
942 5
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
Go 开发者
go-carbon v2.6.0 重大版本更新,轻量级、语义化、对开发者友好的 golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 Golang 时间处理库,提供了对时间穿越、时间差值、时间极值、时间判断、星座、星座、农历、儒略日 / 简化儒略日、波斯历 / 伊朗历的支持
271 3
|
网络协议 测试技术 Linux
Golang 实现轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库
gev 是一个基于 epoll 和 kqueue 实现的高性能事件循环库,适用于 Linux 和 macOS(Windows 暂不支持)。它支持多核多线程、动态扩容的 Ring Buffer 读写缓冲区、异步读写和 SO_REUSEPORT 端口重用。gev 使用少量 goroutine,监听连接并处理读写事件。性能测试显示其在不同配置下表现优异。安装命令:`go get -u github.com/Allenxuxu/gev`。
319 0
|
JSON Go 开发者
go-carbon v2.5.0 发布,轻量级、语义化、对开发者友好的 golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 Golang 时间处理库,提供了对时间穿越、时间差值、时间极值、时间判断、星座、星座、农历、儒略日 / 简化儒略日、波斯历 / 伊朗历的支持。
327 4
|
存储 Cloud Native Shell
go库介绍:Golang中的Viper库
Viper 是 Golang 中的一个强大配置管理库,支持环境变量、命令行参数、远程配置等多种配置来源。本文详细介绍了 Viper 的核心特点、应用场景及使用方法,并通过示例展示了其强大功能。无论是简单的 CLI 工具还是复杂的分布式系统,Viper 都能提供优雅的配置管理方案。
468 6
|
Shell Python
Python 的 os 库的应用实例
Python 的 os 库的应用实例
299 3
|
Python
Python实用记录(四):os模块-去后缀或者改后缀/指定目录下图片或者子目录图片写入txt/csv
本文介绍了如何使用Python的os模块来操作文件,包括更改文件后缀、分割文件路径和后缀、将指定目录下的所有图片写入txt文档,以及将指定目录下所有子目录中的图片写入csv文档,并为每个子目录分配一个标签。
286 1

推荐镜像

更多