golang操作文件的四种方法
golang追加内容到文件末尾
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操作文件的四种方法的更多相关文章
- IO流----操作文件的9种方法代码实现
IO流----操作文件的9种方法代码实现: 1:使用字节流读写数据: 四种方式: method1: 每次读写一个字节,边读边写: /* * 复制文本文件. * * 数据源:从哪里来 ...
- .net(C#)操作文件的几种方法汇总
.net(C#)操作文件的几种方法汇总 System.IO命名空间下类的用法:在System.IO名称空间中包含了用于文件输入输出的主要类.File:实用类,提供许多静态方法,用于移动.复制和删除文件 ...
- PHP读写XML文件的四种方法
PHP对XML文件进行读写操作的方法一共有四种,分别是:字符串方式直接读写.DOMDocument读写. XMLWrite写和XMLReader读.SimpleXML读写,本文将依次对这四种方法进行介 ...
- 精----Java读取xml文件的四种方法
xml文件: Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT> <VA ...
- Qt 添加外部库文件(四种方法)
Qt添加外部库文件, 一种就是直接加库文件的绝对路劲,这种方法简单,但是遇到多个库文件的时候,会很麻烦,而且,如果工程移动位置以后还需要重新配置 另一种就是相对路径了,不过Qt 编译的文件会在一个单独 ...
- OpenCV坐标系与操作像素的四种方法
像素是图像的基本组成单位,熟悉了如何操作像素,就能更好的理解对图像的各种处理变换的实现方式了. 1.at方法 第一种操作像素的方法是使用"at",如一幅3通道的彩色图像image的 ...
- Properties读取资源文件的四种方法
package com.action; import java.io.InputStream; import java.util.Locale; import java.util.Properties ...
- java读取xml文件的四种方法
Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> ...
- C# 下载文件的四种方法
C# 文件下载四方法 - CSDN论坛 - CSDN.NET using System; using System.Data; using System.Configuration; using Sy ...
随机推荐
- phpcms常用函数
1../libs/functions/global.func.php --------------------------------------------------字符串安全处理函数--- ...
- Hardwood Species 分类: POJ 树 2015-08-05 16:24 2人阅读 评论(0) 收藏
Hardwood Species Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 20619 Accepted: 8083 De ...
- WAMP,BITNAMI上建立多个虚拟主机都访问到主站上去了怎么解决?
新建立了多个虚拟主机,访问的结果都是localhost,只要把localhost也建立成一个虚拟主机所有的虚拟主机访问就正常了.
- winform中treeview中节点选中的技巧
我想实现譬如选择某子节点的时候,父节点会自动选中,如果选择父节点,子节点会全部选中,如果子节点全部不选,父节点也要不选. 贴代码 private void tvwMenu_AfterCheck(obj ...
- masonry插件和infinitescroll插件实现无刷新无分页完美瀑布流
地址有:http://www.17sucai.com/pins/2657.html 如果你善于发现美,如果你善于观察新鲜的事物,如果你是一名有爱的前端攻城师或设计尸,那么你一定不会对下面图片中的结构感 ...
- CodeForces 628B New Skateboard
New Skateboard time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- Python3基础 while配合random输出10个随机整数
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- 【leetcode❤python】 58. Length of Last Word
#-*- coding: UTF-8 -*-#利用strip函数去掉字符串去除空格(其实是去除两边[左边和右边]空格)#利用split分离字符串成列表class Solution(object): ...
- 【leetcode❤python】350. Intersection of Two Arrays II
#-*- coding: UTF-8 -*- class Solution(object): def intersect(self, nums1, nums2): ...
- UVA 1291 十四 Dance Dance Revolution
Dance Dance Revolution Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Su ...