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

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

📗概念

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

💻代码

Directories

go 复制代码
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

c 复制代码
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删除临时文件夹

💪无人扶我青云志,我自踏雪至山巅。

相关推荐
2401_846535953 分钟前
Scala项目(图书管理系统)
开发语言·后端·scala
锅包肉的九珍4 分钟前
Scala图书管理系统
开发语言·后端·scala
SomeB1oody11 分钟前
【Rust自学】5.1. 定义并实例化struct
开发语言·后端·rust
Q_192849990620 分钟前
基于Spring Boot的建材租赁系统
java·spring boot·后端
winks328 分钟前
Spring Task的使用
java·后端·spring
Null箘29 分钟前
从零创建一个 Django 项目
后端·python·django
云空33 分钟前
《解锁 Python 数据挖掘的奥秘》
开发语言·python·数据挖掘
秋意钟39 分钟前
Spring新版本
java·后端·spring
青莳吖44 分钟前
Java通过Map实现与SQL中的group by相同的逻辑
java·开发语言·sql