Go语言区块链研习社区块链

区块链开发之Go语言—文件系统

2018-03-27  本文已影响165人  林檎果

处理的文件名

查看文件的元信息

操作临时文件区域

os — 平台无关的操作系统功能实现

os 封装了系统无关的实现。在实际编程中,我们应该总是优先使用 os 中提供的功能,而不是 syscall。

文件 I/O

了解IO需要参照Unix文件系统的概念。

打开一个文件:OpenFile

读取文件内容:Read和ReadAt

数据写入文件:Write

关闭文件:Close

改变文件偏移量:Seek

文件打开时,会将文件偏移量设置为指向文件开始,以后每次 Read 或 Write 调用将自动对其进行调整,以指向已读或已写数据后的下一个字节。因此,连续的 Read 和 Write 调用将按顺序递进,对文件进行操作。

截断文件

func Truncate(name string, size int64) error
func (f *File) Truncate(size int64) error

丢弃文件中大于size的后续字节。

文件属性

改变文件时间戳

文件属主

每个文件都有一个与之关联的用户ID(UID)和组ID(GID),籍此可以判定文件的属主和属组。

func Chown(name string, uid, gid int) error
func Lchown(name string, uid, gid int) error
func (f *File) Chown(uid, gid int) error

文件权限

这里介绍是应用于文件和目录的权限方案,但其规则可适用于所有文件类型,包括设备文件、FIFO 以及 Unix 域套接字等。

普通文件的权限
目录权限
Sticky 位

一般用于目录,起限制删除位的作用。可以在多用户环境下的共享文件夹里删除自己各自的文件。

目录与链接

创建和移除(硬)链接

硬链接是针对文件而言的,目录不允许创建硬链接。

Link 创建一个名为 newname 指向 oldname 的硬链接。如果出错,会返回 *LinkError 类型的错误。

Remove 删除 name 指定的文件或目录。如果出错,会返回 *PathError 类型的错误。如果目录不为空,Remove 会返回失败。

更改文件名

func Rename(oldpath, newpath string) error Rename 修改一个文件的名字或移动一个文件。如果 newpath 已经存在,则替换它。注意,可能会有一些个操作系统特定的限制。

使用符号链接

func Symlink(oldname, newname string) error

Symlink 创建一个名为 newname 指向 oldname 的符号链接。如果出错,会返回 *LinkError 类型的错误。

有时候,我们希望通过符号链接,能获取其所指向的路径名。系统调用 readlink 能做到,Go 的封装函数是 os.Readlink:

func Readlink(name string) (string, error)

创建和移除目录

读目录

func (f *File) Readdirnames(n int) (names []string, err error)
Readdirnames 读取目录 f 的内容,返回一个最多有 n 个成员的[]string,切片成员为目录中文件对象的名字,采用目录顺序。对本函数的下一次调用会返回上一次调用未读取的内容的信息。

如果 n>0,Readdirnames 函数会返回一个最多 n 个成员的切片。这时,如果 Readdirnames 返回一个空切片,它会返回一个非 nil 的错误说明原因。如果到达了目录 f 的结尾,返回值 err 会是 io.EOF。

如果 n<=0,Readdirnames 函数返回目录中剩余所有文件对象的名字构成的切片。此时,如果 Readdirnames 调用成功(读取所有内容直到结尾),它会返回该切片和 nil 的错误值。如果在到达结尾前遇到错误,会返回之前成功读取的名字构成的切片和该错误。

path/filepath — 兼容操作系统的文件路径操作

路径分隔符使用 os.PathSeparator

解析路径名字符串

func Dir(path string) string
func Base(path string) string

相对路径和绝对路径

fmt.Println(filepath.Rel("/home/polaris/studygolang", "/home/polaris/studygolang/src/logic/topic.go"))
fmt.Println(filepath.Rel("/home/polaris/studygolang", "/data/studygolang"))

// Output:
// src/logic/topic.go <nil>
// ../../../data/studygolang <nil>

路径的切分和拼接

规整化路径

符号链接指向的路径名

文件路径匹配

遍历目录

参考

1.《Go语言标准库》The Golang Standard Library by Example

关于我:

linxinzhe,全栈工程师,目前供职于某500强通信企业,人工智能,区块链爱好者。

GitHub:https://github.com/linxinzhe

欢迎留言讨论,也欢迎关注我~
我也会关注你的哦!

上一篇下一篇

猜你喜欢

热点阅读