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

【go从零单排】Directories、Temporary Files and Directories目录和临时目录、临时文件

挪威特罗姆瑟夜景

🌈Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

📗概念

在 Go 语言中,path/filepath 包提供了一组用于处理文件路径的函数,特别是与文件系统路径相关的操作。这个包是 Go 标准库的一部分,主要用于跨平台的路径操作,确保在不同操作系统上(如 Windows 和 Unix/Linux)都能正确处理文件路径。

💻代码

Directories

package main

import (
	//fmt:用于格式化输入和输出。
	//io/fs:提供文件系统接口。
	//os:提供与操作系统交互的功能,如文件和目录操作。
	//path/filepath:用于处理文件路径。
	"fmt"
	"io/fs"
	"os"
	"path/filepath"
)

// check 函数用于检查函数调用的错误,如果有错误则触发(panic),并输出错误信息。
func check(e error) {
	if e != nil {
		panic(e)
	}
}

func main() {
	//创建一个名为 subdir 的目录,权限为 0755(可读、可写、可执行)。
	err := os.Mkdir("subdir", 0755)
	check(err)
	//使用 defer 语句确保程序结束时删除 subdir 及其内容,避免在测试时留下临时文件。
	defer os.RemoveAll("subdir")
	//定义一个匿名函数 createEmptyFile,用于创建一个空文件,权限为 0644(可读、可写)。
	createEmptyFile := func(name string) {
		d := []byte("") //创建一个空的字节切片(slice),byte类型
		check(os.WriteFile(name, d, 0644))
	}
	//创建多个文件和嵌套目录。使用 os.MkdirAll 创建多级目录(如果不存在则创建)。
	createEmptyFile("subdir/file1")

	err = os.MkdirAll("subdir/parent/child", 0755)
	check(err)

	createEmptyFile("subdir/parent/file2")
	createEmptyFile("subdir/parent/file3")
	createEmptyFile("subdir/parent/child/file4")
	//使用 os.ReadDir 读取 subdir/parent 目录的内容
	c, err := os.ReadDir("subdir/parent")
	check(err)

	fmt.Println("Listing subdir/parent")
	//range遍历打印每个条目的名称和是否为目录。
	for _, entry := range c {
		fmt.Println(" ", entry.Name(), entry.IsDir())
	}
	//将当前工作目录更改为 subdir/parent/child。
	err = os.Chdir("subdir/parent/child")
	check(err)
	//读取当前目录(即 child 目录)的内容,并打印。
	c, err = os.ReadDir(".")
	check(err)

	fmt.Println("Listing subdir/parent/child")

	for _, entry := range c {
		fmt.Println(" ", entry.Name(), entry.IsDir())
	}
	//将当前工作目录更改为上上级目录(即返回到项目根目录)。
	err = os.Chdir("../../..")
	check(err)
	//使用 filepath.WalkDir 遍历 subdir 目录及其所有子目录,并调用 visit 函数处理每个条目。
	fmt.Println("Visiting subdir")
	err = filepath.WalkDir("subdir", visit)
}

// visit 函数用于处理遍历到的每个条目,打印路径和是否为目录。如果遇到错误,则返回错误。
func visit(path string, d fs.DirEntry, err error) error {
	if err != nil {
		return err
	}
	fmt.Println(" ", path, d.IsDir())
	return nil
}

Temporary Files and Directories

package main

import (
	//fmt:用于格式化输入和输出。
	//os:提供与操作系统交互的功能,如文件和目录操作。
	//path/filepath:用于处理文件路径。
	"fmt"
	"os"
	"path/filepath"
)

// check 函数用于检查函数调用的错误。如果发生错误,程序会触发(panic),并输出错误信息。
func check(e error) {
	if e != nil {
		panic(e)
	}
}

func main() {
	//os.CreateTemp 创建一个临时文件。
	//第一个参数为空字符串,表示文件将被创建在系统默认的临时目录中。
	//第二个参数 "sample" 是文件名的前缀。
	f, err := os.CreateTemp("", "sample")
	check(err)
	//如果成功,f 是一个文件对象,f.Name() 返回临时文件的完整路径。
	fmt.Println("Temp file name:", f.Name())
	//使用 defer 确保程序结束时删除临时目录及其内容。
	defer os.Remove(f.Name())
	//使用 f.Write 向临时文件写入字节数据 {1, 2, 3, 4}。如果写入失败,将调用 check(err)。
	_, err = f.Write([]byte{1, 2, 3, 4})
	check(err)
	//os.MkdirTemp 创建一个临时目录,类似于创建临时文件。返回的 dname 是新创建的临时目录的路径。
	dname, err := os.MkdirTemp("", "sampledir")
	check(err)
	fmt.Println("Temp dir name:", dname)
	//使用 defer 确保程序结束时删除临时目录及其内容。
	defer os.RemoveAll(dname)
	//使用 filepath.Join 函数将临时目录路径和文件名 "file1" 连接起来,生成完整的文件路径 fname。
	fname := filepath.Join(dname, "file1")
	//os.WriteFile 创建并写入文件,内容为字节 {1, 2},权限为 0666(可读、可写)。
	err = os.WriteFile(fname, []byte{1, 2}, 0666)
	check(err)
}
//输出
//Temp file name: /var/folders/8m/0gvzjwy56xn9d090yqjt4b_00000gn/T/sample2617831697
//Temp dir name: /var/folders/8m/0gvzjwy56xn9d090yqjt4b_00000gn/T/sampledir2719736875

🔍理解

  • os.CreateTemp创建临时文件
  • os.Remove删除临时文件
  • os.MkdirTemp创建临时文件夹
  • os.RemoveAll删除临时文件夹

💪无人扶我青云志,我自踏雪至山巅。
在这里插入图片描述


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

相关文章:

  • Controller Baseband commands速览
  • Linux(CentOS)安装达梦数据库 dm8
  • 渑池县中药材产业党委莅临河南广宇企业管理集团有限公司参观交流
  • RabbitMQ教程:路由(Routing)(四)
  • 环境贴图选用方式
  • FreeSWITCH chat 得到的是 Error! Message Not Sent
  • 应用于各种小家电的快充协议芯片
  • python 多进程,程序运行越来越慢踩坑
  • 【EmbeddedGUI】脏矩阵设计说明
  • Flink执行sql时报错
  • Flask个人网站博客系统(全)
  • 大语言模型通用能力排行榜(2024年10月8日更新)
  • Qt小知识-Q_GLOBAL_STATIC
  • 鸿蒙next版开发:分析JS Crash(进程崩溃)
  • AJAX笔记 (速通精华版)
  • 智能运维:提升效率与响应速度的关键能力
  • TikZ 绘图学习笔记
  • 多目标优化算法:多目标蛇鹫优化算法(MOSBOA)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6,提供完整MATLAB代码
  • 思科设备如何配置第二个radius服务器?
  • 基于微信小程序的校园助手+LW示例参考
  • 【3D Slicer】的小白入门使用指南九
  • 【HOT100第五天】搜索二维矩阵 II,相交链表,反转链表,回文链表
  • MATLAB实现历史模拟法计算VaR(Value at Risk)
  • [Meachines] [Hard] Yummy 任意文件下载+JWT签名绕过+SQLI+定时任务劫持+hg权限提升+rsync权限提升
  • Scala的Array(1)
  • 服务端高并发分布式结构进阶之路