Go語言實現在檔案中插入內容
阿新 • • 發佈:2020-12-31
導語
此指令碼寫的還很稚嫩,實現插入的功能也很簡單,僅供大家參考,有問題可以留言或者私信。
程式碼實現
目錄結構:
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() }