当前位置: 首页 > article >正文

golang学习笔记24-文件操作

本节和函数篇的系统函数(笔记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读写权限
rwx7读写和执行权限
r-x5读和执行权限
---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 main

import (
	"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.")
}


http://www.kler.cn/a/325571.html

相关文章:

  • Ansible自动化运维:基础与实践
  • JS-Web API-day02
  • 算法每日双题精讲 —— 二分查找(二分查找,在排序数组中查找元素的第一个和最后一个位置)
  • An FPGA-based SoC System——RISC-V On PYNQ项目复现
  • AI智能体实战|使用扣子Coze搭建AI智能体,看这一篇就够了(新手必读)
  • 前端常见的设计模式之【单例模式】
  • 实用好软-----电脑端 从视频中导出音频的方便工具
  • 微信小程序-数据模型与动态赋值
  • 女性向游戏的新战场:AI陪伴系统
  • CSS中的字体样式、文本样式、列表样式以及背景和渐变
  • VS Code、Git与自动化脚本的效能之旅
  • MATLAB GUI设计原则与实践
  • GPT带我学-设计模式18-访问者模式
  • Springboot项目-实战2-实现
  • 计数排序(counting sort)
  • 计算机毕业设计 饮食营养管理信息系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 问题:vscode 打印中文时终端输出乱码
  • 快手:数据库升级实践,实现PB级数据的高效管理|OceanBase案例
  • (22)activeMQ部署
  • Linux基础命令mkfs详解
  • C语言基础之数组
  • 低空经济时代:无人机飞行安全要点详解
  • 汽车线束之故障诊断方案-TDR测试
  • Leetcode 3302. Find the Lexicographically Smallest Valid Sequence
  • Anaconda虚拟环境默认路径在C盘怎么更改
  • 【bash】将本地未合入 master 的分支,生成对应 patche 文件