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()
}

golang操作文件的四种方法的更多相关文章

  1. IO流----操作文件的9种方法代码实现

    IO流----操作文件的9种方法代码实现: 1:使用字节流读写数据: 四种方式: method1:          每次读写一个字节,边读边写: /* * 复制文本文件. * * 数据源:从哪里来 ...

  2. .net(C#)操作文件的几种方法汇总

    .net(C#)操作文件的几种方法汇总 System.IO命名空间下类的用法:在System.IO名称空间中包含了用于文件输入输出的主要类.File:实用类,提供许多静态方法,用于移动.复制和删除文件 ...

  3. PHP读写XML文件的四种方法

    PHP对XML文件进行读写操作的方法一共有四种,分别是:字符串方式直接读写.DOMDocument读写. XMLWrite写和XMLReader读.SimpleXML读写,本文将依次对这四种方法进行介 ...

  4. 精----Java读取xml文件的四种方法

    xml文件: Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT> <VA ...

  5. Qt 添加外部库文件(四种方法)

    Qt添加外部库文件, 一种就是直接加库文件的绝对路劲,这种方法简单,但是遇到多个库文件的时候,会很麻烦,而且,如果工程移动位置以后还需要重新配置 另一种就是相对路径了,不过Qt 编译的文件会在一个单独 ...

  6. OpenCV坐标系与操作像素的四种方法

    像素是图像的基本组成单位,熟悉了如何操作像素,就能更好的理解对图像的各种处理变换的实现方式了. 1.at方法 第一种操作像素的方法是使用"at",如一幅3通道的彩色图像image的 ...

  7. Properties读取资源文件的四种方法

    package com.action; import java.io.InputStream; import java.util.Locale; import java.util.Properties ...

  8. java读取xml文件的四种方法

    Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> ...

  9. C# 下载文件的四种方法

    C# 文件下载四方法 - CSDN论坛 - CSDN.NET using System; using System.Data; using System.Configuration; using Sy ...

随机推荐

  1. NotificationObject.cs

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...

  2. hiho 第119周 最大权闭合子图

    描述 周末,小Hi和小Ho所在的班级决定举行一些班级建设活动. 根据周内的调查结果,小Hi和小Ho一共列出了N项不同的活动(编号1..N),第i项活动能够产生a[i]的活跃值. 班级一共有M名学生(编 ...

  3. Linux下缓冲区溢出攻击的原理及对策(转载)

    前言 从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用.当函数调用发生时,新的堆栈帧被压入堆栈:当函数返回时,相应的堆栈帧从堆栈中弹出.尽管堆栈帧结构的引入为在高级语言中实现 ...

  4. InheritableThreadLocal原理

    转载:https://github.com/pzxwhc/MineKnowContainer/issues/20 介绍 InheritableThreadLocal 之前,假设对 ThreadLoca ...

  5. gd-jpeg: JPEG library reports unrecoverable error 解决办法

    Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecov ...

  6. 【Web】写个HTML页面去调试HTTP接口方便些

    现在越来越多的系统基本SOA的思想,业务由许多小系统通过远程调用的方式串连起来,其中HTTP的接口在远程调用的方式中颇为常见.看过一些开发人员写完一些接口后,要么按照正常情况调用几次就交给调用方,要么 ...

  7. SqlSever基础 right函数 从右边开始,截取字符串

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  8. celery入门

    认识 这里有几个概念,task.worker.broker.顾名思义,task 就是老板交给你的各种任务,worker 就是你手下干活的人员. 那什么是 Broker 呢? 老板给你下发任务时,你需要 ...

  9. Cookie 总结

    设置Cookie //设置cookie Cookie cookie = new Cookie("TOM","111"); //设置有效期,默认秒为单位 cook ...

  10. Java开发中经典的小实例-(随机数)

    import java.util.Random;//输出小于33的7个不相同的随机数public class probability {    static Random random = new R ...