Golang 操作临时文件和目录

本文学习Go1.11 版本带来的新功能,ioutil包中提供的TempFile 和 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. 总结

本文学习了ioutil包中提供的TempFile 和 TempDir函数,可以非常简单地创建临时文件和目录。

Golang 操作临时文件和目录相关推荐

  1. 在linux系统下使用C语言操作临时文件

    有时程序需要存储很大量的数据,或者在几个进程间交换数据,这时您可能考虑到使用临时文件.使用临时文件要考虑几个问题: 1.保证临时文件间的文件名不互助冲突. 2.保证临时文件中内容不被其他用户或者黑客偷 ...

  2. golang操作mongodb的驱动mongo-go-driver的事务支持和访问控制(mongodb4.0)

    关注公众号 风色年代(itfantasycc) 300G微服务资料等你拿! 作者: sdghchj 本文链接:golang操作mongodb的驱动mongo-go-driver的事务支持和访问控制_s ...

  3. Python 生成临时文件和目录 -tempfile

    请看代码:官方文档 详见 tempfile- 生成临时文件和目录 >>> import tempfile# create a temporary file and write som ...

  4. 操作系统原理,文件系统的概念与实现,概念,需求,文件分类,逻辑结构,数据结构,文件控制块和文件目录,基本文件操作,多级目录,文件物理结构,Unix的文件多级索引结构

    操作系统原理,文件系统的概念与实现,概念,需求,文件分类,逻辑结构,数据结构,文件控制块和文件目录,基本文件操作,多级目录,文件物理结构,Unix的文件多级索引结构 基本概念 一.文件概念: 1.文件 ...

  5. python操作文件和目录_Python操作文件和目录

    Python操作文件和目录 读写文件比较简单,有一点特别注意就好了 windows下Python默认打开的文件以gbk解码,而一般我们的文件是utf-8编码的,所以如果文本含有中文,就会出现异常或者乱 ...

  6. golang操作文件

    看一下golang操作文件的测试代码. package mainimport ("fmt""os" )//O_CREATE func main() {f, er ...

  7. golang操作mysql用例

    ❤️强烈推荐人工智能学习网站❤️ golang操作mysql的demo,直接上代码 package mainimport ("database/sql""fmt" ...

  8. golang mysql商业用例_完美起航-golang操作mysql用例

    golang操作mysql的demo,直接上代码 package main import ( "database/sql" "fmt" _ "gith ...

  9. 三十四 操作文件和目录

    如果我们要操作文件.目录,可以在命令行下面输入操作系统提供的各种命令来完成.比如dir.cp等命令. 如果要在Python程序中执行这些目录和文件的操作怎么办?其实操作系统提供的命令只是简单地调用了操 ...

  10. golang操作postgresql数据库jsonb类型

    golang操作postgresql数据库jsonb类型 本文以案例为主,少言,自悟. 推荐一个测试sql的网站 SQL操作 // 创建一个带有jsonb列的表 CREATE TABLE items ...

最新文章

  1. hadoop fs命令无法使用_「大数据」「Hadoop」HDFS的配置与管理
  2. php的htaccess,.htaccess
  3. SAP WM Production Schedule Profile设置问题导致生产补货的TO单自动创建问题
  4. 7开启uasp协议_【环海解读】新版通关无纸化协议签约amp;报关代理委托发起和确认操作流程...
  5. IntelliJ IDEA for Mac 如何自定义快捷键_设置快捷键
  6. android 点击热区,增大UIButton的点击热区
  7. oracle-01122,oracle ORA-01200ORA-01110ORA-01122
  8. [礼仪大赛常识]酒店客房服务礼仪
  9. 毕业设计-智能自选综合商城设计(毕业设计源码+系统+文档+部署)
  10. DQN_Continuous_Action
  11. iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码
  12. 考研路上的那些一战二战三战成功与失败的故事系列之十三
  13. idea 自动同步文件本地内容设置
  14. matlab stats里的f值,MATLAB 回归分析regress,nlinfit,stepwise函数
  15. .Net asp.net MVC 实现短信验证
  16. Linux下穿件带点文件夹和隐藏文件显示隐藏文件命令
  17. OSPF邻居震荡抑制
  18. JAVA 实现MD5加密算法
  19. 思科设备操作命令(CISCO IOS)
  20. C++围棋小游戏1.2.2

热门文章

  1. android 渠道包 作用,谈谈我的Android多渠道打包方式
  2. 使用cecil 完毕 code injection
  3. 图嵌入综述整理(上)
  4. el-cascader级联选择器当子节点的children为空数组的话,有bug(前端解决办法)
  5. ICGC:国际肿瘤基因组协会简介
  6. P1084 [NOIP2012 提高组] 疫情控制
  7. 解决工商银行网银插件报‘非正常运行的网银工具’问题
  8. 如何用 Python 和 Pandas 分析犯罪记录开放数据?
  9. STM32涉及到的汇编基础知识
  10. 无线通信基础知识13:数字通信之信道编码