Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Golang 语言的标准库 os 包怎么操作目录和文件?

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

作者头像
frank.
发布于 2021-03-09 10:22:32
发布于 2021-03-09 10:22:32
83300
代码可运行
举报
运行总次数:0
代码可运行

01

介绍

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fi, err := os.Stat("file1.txt")
 if err != nil {
  fmt.Println(err)
  return
 }

文件权限 FileMode

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type FileMode uint32

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fi, err := f.Stat()
 if err != nil {
  fmt.Println(err)
  return
 }
 fileMode := fi.Mode().String()
 fmt.Println(fileMode)

文件 File

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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) 读取文件的最大长度的字节。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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) 从文件的字节偏移量位置开始读取最大长度的字节
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 包的用法。

推荐阅读:

Golang 语言怎么使用 gomail 库发送邮件?

Golang 语言三方库 lumberjack 日志切割组件怎么使用?

Go team 开源项目 Go Cloud 使用的依赖注入工具 Wire 怎么使用?

Golang 语言的值验证库 Validator 怎么使用?

Golang语言使用 jwt-go 库生成和解析 token

参考资料:

https://golang.org/pkg/os/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Go语言开发栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
golang os 系统包
func Stat(name string) (fi FileInfo, err error)
copy_left
2019/08/23
1.4K0
go - os包 彻头彻尾用法使用
os包提供了操作系统函数的不依赖平台的接口。设计为Unix风格的,虽然错误处理是go风格的;失败的调用会返回错误值而非错误码。通常错误值里包含更多信息。例如,如果某个使用一个文件名的调用(如Open、Stat)失败了,打印错误时会包含该文件名,错误类型将为*PathError,其内部可以解包获得更多信息。
酷走天涯
2018/09/19
4.5K0
go - os包 彻头彻尾用法使用
使用Golang操作文件的那些事儿
文件:计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件。例如咱们常见的文件后缀名.exe,.txt,'.word'…等等
PayneWu
2020/12/18
9390
使用Golang操作文件的那些事儿
【Go 语言社区】Go文件操作函数
文件操作 golang的文件操作时在os包中的。 所以用的时候要import os包 包含以下的这些函数 func Create(name string) (file *File, err error) 直接通过纹面创建文件 func NewFile(fd uintptr, name string) *File func Open(name string) (file *File, err error) 以只读方式打开一个存在的文件,打开就可以读取
李海彬
2018/03/20
8050
Golang读写文件操作
最近在使用Golang进行文件读写的过程中,遇到几个细节问题导致程序写入数据时有一定脏数据的残留,最后发现是使用os.OpenFile在进行文件操作的时候没有使用正确的flag造成的。因此专门去学习了下Golang中读写文件的几种方式方法,在此记录下一些简单的操作,防止以后遗忘。 读文件 使用golang语言去读取一个文件默认会有多种方式,这里主要介绍以下几种。 使用ioutil直接读取 需要引入io/ioutil包,该包默认拥有以下函数供用户调用。 func NopCloser(r io.Reader)
BGBiao
2018/02/26
4.3K0
一文掌握 Go 文件的读取和写入操作
Go 标准库的 os 包,为我们提供很多操作文件的函数,如 Open(name) 打开文件、Create(name) 创建文件等函数,与之对应的是 bufio 包,os 包是直接对磁盘进行操作的,而 bufio 包则是带有缓冲的操作,不用每次都去操作磁盘。
陈明勇
2023/10/15
9270
一文掌握 Go 文件的读取和写入操作
区块链开发之Go语言—文件系统
处理的文件名 path库 filepath库 查看文件的元信息 os.Stat os.Lstat 操作临时文件区域 os.TempDir os — 平台无关的操作系统功能实现 os 封装了系统无关的实现。在实际编程中,我们应该总是优先使用 os 中提供的功能,而不是 syscall。 文件 I/O 了解IO需要参照Unix文件系统的概念。 在 Unix 系统调用中,所有执行 I/O 操作以文件描述符,一个非负整数(通常是小整数),来指代打开的文件。 文件描述符用以表示所有类型的已打开文件,包括管道(pipe
linxinzhe
2018/04/10
1.4K0
Golang中文件目录操作的实现
       Golang中,文件是指计算机中存储数据的实体,文件可以是文本文件、二进制文件、配置文件等。在Go语言中,通过操作文件,我们可以读取文件的内容,写入数据到文件,以及获取文件的属性等。
周小末天天开心
2023/10/16
4290
Golang中文件目录操作的实现
Go基础——文件操作
根据path删除多级子目录,如果path是单个名称,那么该目录下的子目录全部删除。
羊羽shine
2019/05/28
4350
Go语言的os包中常用函数初步归纳
1)os.Getwd函数原型是func Getwd() (pwd string, err error) 返回的是路径的字符串和一个err信息,为什么先开这个呢?因为我看os的包的时候第一个是Chkdir这个包,但是你不知道当前目录怎么知道改变目录了呢?所以先说Getwd() 函数demo import ( "fmt" "os" ) func main() { dir, _ := os.Getwd() fmt.Println("当前的目录是:", dir) //当前的目录是: D:\test 我
李海彬
2018/03/20
3.6K0
go语言学习-文件读写 io os ioutil
1.func (f *File) Seek(offset int64, whence int) (ret int64, err error) Seek 用来设置文件指针的位置,offet 是偏移量,whence 的取值可以是下面的三个: SEEK_SET 相对文件开始偏移 SEEK_CUR 相对文件当前位置偏移 SEEK_END 相对文件末尾偏移
solate
2019/07/22
1.4K0
【愚公系列】2022年08月 Go教学课程 039-文件操作
文件的操作在计算机是必不可少的,比如word、excel、ppt,txt等等在日常办公中都是很常用的。文件的操作主要包含:创建文件、打开文件、读取文件、写入文件、关闭文件、打包/解包、压缩/解压缩、改变文件权限、删除文件、移动文件、重命名文件等。
愚公搬代码
2022/09/21
1970
【愚公系列】2022年08月 Go教学课程 039-文件操作
Golang文件操作-下篇
主要是通过os包的open方法打开文件,并接收返回的错误信息,给os包的IsNotExist函数判断,返回一个布尔值
仙人技术
2021/09/23
5530
Golang文件操作-下篇
超全总结:Go语言如何操作文件
本文所有代码已经上传github:https://github.com/asong2020/Golang_Dream/tree/master/code_demo/file_operate_demo
Golang梦工厂
2022/12/08
4430
超全总结:Go语言如何操作文件
golang中的文件操作
与Java类似,也是通过流的形式读取文件,将文件读入内存使用输入流,将内存中数据写入文件使用输出流。
你的益达
2020/11/03
6410
Golang包——io
Reader 接口包装了基本的 Read 方法,用于输出自身的数据。Read 方法用于将对象的数据流读入到 p 中,返回读取的字节数和遇到的错误。 如果读到了数据(n > 0),则 err 应该返回 nil。如果数据被读空,没有数据可读(n == 0),则 err 应该返回 EOF。 如果遇到读取错误,则 err 应该返回相应的错误信息。
羊羽shine
2019/05/29
5380
2.Go语言之文件操作学习记录.md
描述: 我们可以采用os包中的Open()函数打开一个文件,返回一个*File和一个err。然后对得到的文件实例调用Close()函数就能够关闭文件。
全栈工程师修炼指南
2022/09/29
5040
区块链开发之Go语言—IO操作
本篇文章是对区块链开发中的Go语言中常用的io操作的库做一个梳理 io,最基本的io Reader type Reader interface { Read(p []byte) (n int, err error) } 实现了Reader接口的都可以用read方法,将数据读入到p字节数组,n表示读取了几个字节,err返回错误。 如果读到了文件尾EOF,则err返回EOF。 注意,当文件最后一小段已经无法填满p这个字节数组时,不会产生EOF的错误,只会在下一次读取时产生n=0,err=io.EOF的错
linxinzhe
2018/04/10
1.1K0
Go 文件的读取操作
Go 标准库的 os 包,为我们提供很多操作文件的函数,如 Open(name) 打开文件、Create(name) 创建文件等函数,与之对应的是 bufio 包,os 包是直接对磁盘进行操作的,而 bufio 包则是带有缓冲的操作,不用每次都去操作磁盘。
每周聚焦
2024/11/06
1420
Go 文件的读取操作
为什么要避免在 Go 中使用 ioutil.ReadAll?
ioutil.ReadAll 主要的作用是从一个 io.Reader 中读取所有数据,直到结尾。
AlwaysBeta
2022/01/06
2.9K0
相关推荐
golang os 系统包
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验