设为首页 收藏本站
查看: 1206|回复: 0

[经验分享] golang操作文件的四种方法

[复制链接]

尚未签到

发表于 2018-9-20 10:37:14 | 显示全部楼层 |阅读模式
golang追加内容到文件末尾
字数349 阅读54 评论0 喜欢2  golang读写文件,网上很多教程了
  但是今天有个需求,想要把内容追加写到文件末尾
  google了好久,没有查到
  研究了一会儿file库,终于让我找到(蒙到)了追加的办法
  最主要的2个函数:
  func (f *File) Seek(offset int64, whence int) (ret int64, err error)
  func (f *File) WriteAt(b []byte, off int64) (n int, err error)

  • Seek()查到文件末尾的偏移量
  • WriteAt()则从偏移量开始写入
  以下是栗子:
  // fileName:文件名字(带全路径)// content: 写入的内容func appendToFile(fileName string, content string) error {// 以只写的模式,打开文件f, err := os.OpenFile(fileName, os.O_WRONLY, 0644)if err != nil {fmt.Println("cacheFileList.yml file create failed. err: " + err.Error())} else {// 查找文件末尾的偏移量n, _ := f.Seek(0, os.SEEK_END)// 从末尾的偏移量开始写入内容_, err = f.WriteAt([]byte(content), n)}   defer f.Close()   return err}
  拿去用吧,别客气 :)
  觉得目前国内golang的文档博客还是稍微缺乏了点,
  希望大家平时coding中有什么心得体会互相分享,
  让golang越来越好用!
  2016/08/31 记:
  我就是笨蛋,明明最简单的方式就可以实现了:
  f, err := os.OpenFile(fileName, os.O_WRONLY|os.O_APPEND, 0666)
  以写跟追加的方式打开文件。。。
  下面附有操作文件的四种方式
  package main
  import (
  "bufio"  //缓存IO
  "fmt"
  "io/ioutil" //io 工具包
  "io"
  "os"
  )
  func check(e error) {
  if e != nil {
  panic(e)
  }
  }
  /**
  * 判断文件是否存在  存在返回 true 不存在返回false
  */
  func checkFileIsExist(filename string) (bool) {
  var exist = true;
  if _, err := os.Stat(filename); os.IsNotExist(err) {
  exist = false;
  }
  return exist;
  }
  /**
  from: http://www.isharey.com/?p=143
  */
  func main() {
  var wireteString = "测试n"
  var filename = "./output1.txt";
  var f    *os.File
  var err1   error;
  /***************************** 第一种方式: 使用 io.WriteString 写入文件 ***********************************************/
  if checkFileIsExist(filename) {  //如果文件存在
  f, err1 = os.OpenFile(filename, os.O_APPEND, 0666)  //打开文件
  fmt.Println("文件存在");
  }else {
  f, err1 = os.Create(filename)  //创建文件
  fmt.Println("文件不存在");
  }
  check(err1)
  n, err1 := io.WriteString(f, wireteString) //写入文件(字符串)
  check(err1)
  fmt.Printf("写入 %d 个字节n", n);
  /*****************************  第二种方式: 使用 ioutil.WriteFile 写入文件 ***********************************************/
  var d1 = []byte(wireteString);
  err2 := ioutil.WriteFile("./output2.txt", d1, 0666)  //写入文件(字节数组)
  check(err2)
  /*****************************  第三种方式:  使用 File(Write,WriteString) 写入文件 ***********************************************/
  f, err3 := os.Create("./output3.txt")  //创建文件
  check(err3)
  defer f.Close()
  n2, err3 := f.Write(d1)  //写入文件(字节数组)
  check(err3)
  fmt.Printf("写入 %d 个字节n", n2)
  n3, err3 := f.WriteString("writesn") //写入文件(字节数组)
  fmt.Printf("写入 %d 个字节n", n3)
  f.Sync()
  /***************************** 第四种方式:  使用 bufio.NewWriter 写入文件 ***********************************************/
  w := bufio.NewWriter(f)  //创建新的 Writer 对象
  n4, err3 := w.WriteString("bufferedn")
  fmt.Printf("写入 %d 个字节n", n4)
  w.Flush()
  f.Close()
  }


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-598747-1-1.html 上篇帖子: Ubuntu 16.04下安装golang 下篇帖子: Golang 新手可能会踩的 50 个坑
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表