golang 文件讀寫
1. 常用函數列表:
func Create (name string) (file *File, err error)
func Open (name string) (file *File, err error)
func (f *File) Read (b []byte) (n int, err error)
func (f *File) Write (b []byte) (n int, err error)
func (f *File) WriteString (s string) (ret int, err error)
func (f *File) WriteAt (b []byte, off int64) (n int, err error)
func (f *File) ReadAt (b []byte, off int64) (n int, err error)
func (f *File) Seek (offset int64, whence int) (ret int64, err error)
func OpenFile (name string, flag int, perm FileMode) (file *File, err error)
文件寫操作:
package main
import (
"fmt"
"os"
)
func main() {
// 創建文件
file_fd, err := os.Create("E:/1D/go/log/first.log")
// 字符串方式寫入
len, err := file_fd.WriteString("Create a new file\n")
fmt.Println("WriteString 寫入長度:", len)
// 數組方式寫入
str_buf := []byte("write data by []byte\n") /*字符串轉數組*/
len, err = file_fd.Write(str_buf)
fmt.Println("Write 寫入長度:", len)
// 獲取文件指針的位置
cur_fd_pst, err := file_fd.Seek(0, 1)
fmt.Println("文件指針當前位置:", cur_fd_pst)
// 設置文件指針的偏移量
cur_fd_pst, err = file_fd.Seek(10, 1)
fmt.Println("文件指針當前位置:", cur_fd_pst)
cur_fd_pst, err = file_fd.Seek(0, 1)
// 從指定位置寫入
len, err = file_fd.WriteAt([]byte("WriteAt Begin ..."), cur_fd_pst)
fmt.Println("WriteAt 寫入長度:", len)
cur_fd_pst, err = file_fd.Seek(0, 1) /*這時的文件指針並不是最後的位置,WriteAt沒有刷新文件指針,如果繼續寫數據需要手動刷新文件指針的位置*/
fmt.Println("文件指針當前位置:", cur_fd_pst)
if err != nil {
}
file_fd.Close()
}
結果如下:
文件讀操作
package main
import (
"fmt"
"os"
)
func main() {
rd_fd, err := os.Open("E:/1D/go/log/first.log")
b := make([]byte, 18)
// 普通read讀取
rd_fd.Read(b)
fmt.Println("read :", string(b))
// rd_fd.Seek(-18, 1)
// rd_fd.Read(b)
// 指定指針位置開始讀取
rd_fd.ReadAt(b, 0)
fmt.Println("read :", string(b))
if err != nil {
}
rd_fd.Seek(-18, 1)
all_context := ""
for len, _ := rd_fd.Read(b); len > 0; len, _ = rd_fd.Read(b) {
all_context = fmt.Sprintf("%s%s", all_context, b)
}
fmt.Println("for read : \n", all_context)
rd_fd.Close()
}
輸出: