1. 程式人生 > 其它 >Go語言實現在檔案中插入內容

Go語言實現在檔案中插入內容

技術標籤:GOgogolang

導語

此指令碼寫的還很稚嫩,實現插入的功能也很簡單,僅供大家參考,有問題可以留言或者私信。

程式碼實現

目錄結構:

123.txt(大家準備個此名的檔案,內容隨便)

123456
abcefg

main.go

package main

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

func editFile() {
	// 要實現追加的方式插入值而不是覆蓋
	// 原始檔
	srcfile, err := os.OpenFile("./123.txt", os.O_RDWR, 0644)
	if err != nil {
		fmt.Printf("open file failed, err:%v\n", err)
		return
	}
	// 臨時檔案
	tmpfile, err := os.OpenFile("./123.tmp", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
	if err != nil {
		fmt.Printf("open file failed, err:%v\n", err)
		return
	}
	// 指定在什麼位置插入內容
	// 讀取游標前的內容寫到臨時檔案
	var b [3]byte
	// Read函式傳入一個數組並把內容寫到數組裡
	n, err := srcfile.Read(b[:])
	if err != nil {
		fmt.Printf("read file failed, err:%v\n", err)
		return
	}
	tmpfile.Write(b[:n])
	// 把插入的內容也寫到臨時檔案
	tmpfile.WriteString("hello")
	// 把原始檔游標後的內容也寫入到臨時檔案
	var x [1024]byte
	for {
		n, err := srcfile.Read(x[:])
		if err == io.EOF {
			tmpfile.Write(x[:n])
			break
		}
		if err != nil {
			fmt.Printf("read from file failed, err:%v\n", err)
			return
		}
		tmpfile.Write(x[:n])
	}
	tmpfile.Close()
	srcfile.Close()
	// 使用os.Rename不能使用defer語句去關閉檔案控制代碼,因為defer語句是在函式指定完去執行,但是Rename操作需要時需要先關閉控制代碼
	ok := os.Rename("./123.tmp", "./123.txt")
	if ok == nil {
		fmt.Println("檔案操作完成")
	} else {
		fmt.Printf("err:%v", ok)
	}
}

func main() {
	editFile()
}