本节和函数篇的系统函数(笔记14:系统函数)一样,只需读懂代码即可。想了解更多用法可参考官方文档:https://studygolang.com/pkgdoc
文件有五大操作:
1.创建文件:os.Create()
用于创建一个新文件,如果文件已经存在,将会清空文件的内容。返回的文件是可写的,模式默认是 0666(即可读写)。
2.打开文件:os.Open()
以只读模式打开文件,不能进行写入操作。如果文件不存在,将返回错误。os.OpenFile()
提供了更多选项来控制文件的打开模式和文件权限。打开模式介绍如下:
模式 | 功能 |
---|---|
os.O_RDONLY | 只读模式 |
os.O_WRONLY | 只写模式 |
os.O_RDWR | 读写模式 |
os.O_CREATE | 文件不存在时创建新文件 |
os.O_TRUNC | 打开文件时清空其内容 |
os.O_APPEND | 追加模式,写入时从文件末尾开始 |
文件权限介绍如下:
文件权限 | 数值表示 | 权限描述 |
---|---|---|
r-- | 4 | 只读权限 |
rw- | 6 | 读写权限 |
rwx | 7 | 读写和执行权限 |
r-x | 5 | 读和执行权限 |
--- | 0 | 无权限 |
文件权限组合 (rwxr-xr-x 示例):
- 前 3 位(用户权限): 拥有者的权限 (rwx: 可读、写、执行)
- 中 3 位(组权限): 文件所属组的权限 (r-x: 可读、执行,不能写)
- 后 3 位(其他人权限): 其他用户的权限 (r-x: 可读、执行,不能写)
权限数值计算:
- 读 (r ) = 4
- 写 (w) = 2
- 执行 (x) = 1
- 权限组合数值为这三者的加和:
rwx
= 4 + 2 + 1 = 7
例:0644
第一个数字 0:表示文件类型信息(通常留空,默认是 0,在大多数情况下忽略)。
第二个数字 6:表示文件所有者的权限。6 由 4 (读) 和 2 (写) 相加,表示该文件的所有者有读和写权限。
第三个数字 4:表示文件所属组的权限。4 表示组用户仅有读权限。
第四个数字 4:表示其他用户的权限。4 也表示其他用户仅有读权限。
3.读取文件:使用ioutil.ReadFile() 或os.ReadFile()读取文件内容。注意ioutil.ReadFile()在1.16以上的版本中已被标记为弃用,建议使用os.ReadFile()
,这个函数会返回文件的内容作为字节切片。
4.写入文件:WriteString()
通过File的方法将字符串写入到文件中。需要先使用os.Create()或os.OpenFile()获取文件句柄。
5.删除文件:使用os.Remove()
删除指定文件。
示例
package mainimport ("fmt""os"
)func main() {// 1. 创建文件file, err := os.Create("example.txt") // 创建文件或清空已存在文件if err != nil {fmt.Println("Error creating file:", err)return}// 2. 写入文件_, err = file.WriteString("Hello, Go! File operations demo.")if err != nil {fmt.Println("Error writing to file:", err)return}file.Close() // 写入完成后关闭文件// 3. 打开文件以读写模式,并追加内容file, err = os.OpenFile("example.txt", os.O_RDWR|os.O_APPEND, 0644)if err != nil {fmt.Println("Error opening file:", err)return}// 向文件中追加内容_, err = file.WriteString("\nAppending new content to the file.")if err != nil {fmt.Println("Error appending to file:", err)return}file.Close()// 4. 读取文件内容content, err := os.ReadFile("example.txt") // 读取整个文件内容if err != nil {fmt.Println("Error reading file:", err)return}fmt.Println("File content:\n", string(content)) //注意转换// 5. 删除文件err = os.Remove("example.txt") // 删除文件if err != nil {fmt.Println("Error deleting file:", err)return}fmt.Println("File deleted successfully.")
}