Golang 操作临时文件和目录

ioutilTempFile 和 TempDir

1. 临时文件

TempFile
package mainimport ("fmt""ioutil""os"
)func main() {// ioutil.TempFile 返回文件和错误// 这里指定目录car-images 和 文件名称格式 car-*.pngfile, err := ioutil.TempFile("car-images", "car-*.png")if err != nil {fmt.Println(err)}// 确保程序结束时删除临时文件defer os.Remove(file.Name())// 打印创建的临时文件名称fmt.Println(file.Name())
}

运行程序,输出如下:

car-images\car-345523891.png
*

2. 写临时文件

write
package mainimport ("fmt""ioutil""os"
)func main() {// ioutil.TempFile 返回文件和错误// 这里指定目录car-images 和 文件名称格式 car-*.pngfile, err := ioutil.TempFile("car-images", "car-*.png")if err != nil {fmt.Println(err)}// 确保程序结束时删除临时文件defer os.Remove(file.Name())// 写 hello world\n if _, err := file.Write([]byte("hello world\n")); err != nil {fmt.Println(err)}data, err := ioutil.ReadFile(file.Name())// 如果程序不能读文件打印错误原因if err != nil {fmt.Println(err)}// 如果读取成功打印内容fmt.Print(string(data))
}

上面往临时文件中写入hello world,然后读取并打印验证。

运行程序输出:

hello world

3. 创建临时目录

上面创建了临时文件,现在我们学习如何创建临时目录。对于我们上面提及的对象识别系统,可能需要创建临时目录存放非汽车的其他物品。这里扩展上面的示例,创建临时目录,然后在目录中创建临时文件:

package mainimport ("fmt""io/ioutil""os"
)func main() {tempDir, err := ioutil.TempDir("", "cars-")if err != nil {fmt.Println(err)}defer os.RemoveAll(tempDir)file, err := ioutil.TempFile(tempDir, "car-*.png")if err != nil {fmt.Println(err)}defer os.Remove(file.Name())// 打印文件的完整名称fmt.Println(file.Name())if _, err := file.Write([]byte("hello world\n")); err != nil {fmt.Println(err)}data, err := ioutil.ReadFile(file.Name())// 如果程序不能读文件打印错误原因if err != nil {fmt.Println(err)}// 如果读取成功打印内容fmt.Print(string(data))
}

运行程序,我们能看到创建了全局唯一目录和临时文件名称,运行结果:

C:\Users\ADMINI~1\AppData\Local\Temp\cars-604917127\car-281252154.png
hello world

4. 总结

ioutilTempFile 和 TempDir