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()
}
结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/bf93801a82e762057acc08dcab722bba.png)
文件读操作
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()
}
输出: