golang 文件Seek和Truncate的結合使用

在需要分步寫入整條信息時做回滾操作時使用

/*
 * @Description:
 * @Author: gphper
 * @Date: 2021-11-06 20:11:56
 */
package main

import (
	"fmt"
	"io"
	"log"
	"os"
)

func main() {
	f, err := os.OpenFile(`file.txt`, os.O_RDWR, os.ModePerm)
	if err != nil {
		log.Fatal(err)
	}

	initSize, err := f.Seek(0, io.SeekEnd)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(initSize)

	//模擬出錯時出錯時
	f.WriteString("error!")

	//恢復寫之前的狀態
	err = f.Truncate(initSize)
	if err != nil {
		log.Fatal(err)
	}
	_, err = f.Seek(initSize, io.SeekStart)
	if err != nil {
		log.Fatal(err)
	}
	//狀態恢復完成

	//開始新的寫操作
	_, err = f.WriteString("new start text")
	if err != nil {
		log.Fatal(err)
	}

}

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章