w1w 发表于 2018-9-20 10:37:14

golang操作文件的四种方法

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]
查看完整版本: golang操作文件的四种方法