zoukankan      html  css  js  c++  java
  • golang操作文件的四种方法

    golang追加内容到文件末尾

    最主要的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}
    
    
    
    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()
    }
    

      

  • 相关阅读:
    kuangbin_ShortPath P (HDU 4725)
    kuangbin_ShortPath O (LightOJ 1074)
    方法的定义格式
    A Better Finder Rename 9.40 Key
    [iOS] 初探 iOS8 中的 Size Class
    iOS 后台执行
    iOS7 毛玻璃效果
    PhpStorm8 注册码
    [教程] 【终极开关机加速!!】手把手教你加速Mac的开关机速度。(经验证适用10.10!)
    iOS 取应用版本
  • 原文地址:https://www.cnblogs.com/zhangym/p/5826743.html
Copyright © 2011-2022 走看看