golang 文件寫 入門

  • ioutil
  • os.OpenFile 記得寫完內容後 file.Sync()
  • bufio.NewWriter 寫完內容後 writer.Flush()
const (
	// O_RDONLY, O_WRONLY, or O_RDWR 必須指定
	O_RDONLY int = syscall.O_RDONLY // 只讀
	O_WRONLY int = syscall.O_WRONLY // 只寫
	O_RDWR   int = syscall.O_RDWR   // 讀寫
	// The remaining values may be or'ed in to control behavior.
	O_APPEND int = syscall.O_APPEND // 追加
	O_CREATE int = syscall.O_CREAT  // 如果文件不存在,創建
	O_EXCL   int = syscall.O_EXCL   // 和O_CREATE一起使用, 只有當文件不存在時才創建
	O_SYNC   int = syscall.O_SYNC   // 以同步I/O方式打開文件,直接寫入硬盤
	O_TRUNC  int = syscall.O_TRUNC  // 清空文件
)
package main

import (
	"bufio"
	"fmt"
	"io/ioutil"
	"os"
)

func main()  {
	// writeFileIoUtil()
	// wirteFileOsOpenFile()
	writeFileBufio()
}

// writeFileIoUtil 覆蓋式寫入,不會自動寫入換行
func writeFileIoUtil() {
	c := "content"
	c1 := "content1"
	data := []byte(c)
	data1 := []byte(c1)
	ioutil.WriteFile("./1.txt", data, 0644)
	ioutil.WriteFile("./1.txt", data1, 0644)
}

// 不會自動寫入換行
func wirteFileOsOpenFile() {
	file, err := os.OpenFile("./1.txt", os.O_CREATE | os.O_RDWR | os.O_APPEND, 0644)
	if err != nil {
		fmt.Printf("file open err %v", err)
	}
	defer file.Close()
	c := []byte("hello world\n")
	if n, err := file.Write(c); err != nil {
		fmt.Printf("file write err %v", err)
	} else {
		fmt.Println(n)
	}
	c1 := "wakakawakaka\n"
	if n, err := file.WriteString(c1); err != nil {
		fmt.Printf("file write err %v", err)
	} else {
		fmt.Println(n)
	}
	file.Sync()
}

func writeFileBufio() {
	file, err := os.OpenFile("./1.txt", os.O_CREATE | os.O_RDWR | os.O_APPEND, 0644)
	if err != nil {
		fmt.Printf("file open err %v", err)
	}
	defer file.Close()
	writer := bufio.NewWriter(file)
	c := []byte("hello world\n")
	n, err := writer.Write(c)
	if err != nil {
		fmt.Printf("file write err %v", err)
	}
	fmt.Println(n)
	s := "wakakawakaka\n"
	n, err = writer.WriteString(s)
	if err != nil {
		fmt.Printf("file write err %v", err)
	}
	fmt.Println(n)
	writer.Flush()
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章