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