主程序main.go
package main
import (
"fmt"
"os"
)
// GetTempDirs 获取临时文件及文件夹
func GetTempDirs() []string {
//TempDir返回临时文件使用的默认目录。
//在Unix系统中,如果非空则返回$TMPDIR,否则返回/tmp。
//在Windows上,它使用GetTempPath,返回%TMP%、%TEMP%、%USERPROFILE%或Windows目录中的第一个非空值。
//既不能保证该目录存在,也不能保证该目录具有可访问权限。
tempDir := os.TempDir()
//输出tempDir临时文件夹的目录名
fmt.Println("temp folder is : ",tempDir)
//ReadDir读取指定的目录,返回所有按文件名排序的目录项。
//如果在读取目录时发生错误,ReadDir将返回它在错误发生前能够读取的条目以及错误。
readDir, _ := os.ReadDir(tempDir)
//声明tmpFiles,类型是[]string,目的是为了存储临时文件和文件夹的路径
var tmpFiles []string
//迭代循环出临时文件或文件夹的名字
for _, entry := range readDir {
//entry.Name返回条目所描述的文件(或子目录)的名称。
//这个名称只是路径的最后一个元素(基本名称),而不是整个路径。
//因此绝对路径就需要拼接。
tmpFile := tempDir + "\\" + entry.Name()
fmt.Println("temp file/folder : ",tmpFile)
//将拼接好的绝对路径传递进tmpFiles
tmpFiles = append(tmpFiles, tmpFile)
}
//最后返回tmpFiles
return tmpFiles
}
// WaitPress 任意键退出
func WaitPress() {
fmt.Println("work finish, press any key to exit...")
b := make([]byte, 1)
_, _ = os.Stdin.Read(b)
}
// DeleteTemp 主程序,删除临时文件夹和文件
func DeleteTemp() {
//首先GetTempDirs()获取了临时文件或文件夹的绝对路径,类型是[]string
//然后迭代查询出每个文件或文件夹的名字s
for _, s := range GetTempDirs() {
//os.RemoveAll函数可以删除路径及其包含的任何子路径。
//如果路径不存在,RemoveAll返回nil(无错误)。如果有错误,它的类型将是*PathError。
err := os.RemoveAll(s)
if err != nil {
fmt.Println("remove tmp error : ", err.Error())
}else {
fmt.Printf("delete temp sucess: %v \n", s)
}
}
//执行完毕后,等待输入任意键退出,
//在此处设置这个目的是为了检查删除情况.
WaitPress()
}
func main() {
DeleteTemp()
}
单元测试程序main_test.go
package main
import "testing"
func TestDeleteTemp(t *testing.T) {
DeleteTemp()
}
func TestGetTempDirs(t *testing.T) {
GetTempDirs()
}
生成可执行程序,并执行
执行效果
由于没有固定临时文件夹的路径,临时文件夹的位置是通过程序自动读取的,因此可移植性很高,生成的可执行程序也就可以放在任意台计算机上使用。