OS下打开与关闭文件
在GO最基层面操作
os包内File
几个基础函数
OpenFile是一个一般性的文件打开函数,大多数调用者都应用Open或Create代替本函数。它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型是*PathError。
func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
OpenFile可以指定你想要的方式打开和创建一个新文件
在OpenFile基础上包装的两个函数
- func Create(name string) (file *File, err error) // 采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,如果文件已存在会截断它(清空原文件),如果不存在就创建它
- func Open(name string) (file *File, err error) // 只读方式打开一个文件,文件不存在时报错(文件找不到)
文件创建
package main
import (
"fmt"
"os"
)
func main() {
// 创建文件,当12.txt不存在时就新建一个文件
// 当12.txt已存在时则清空原来
file, err := os.Create("12.txt")
if err != nil {
fmt.Println("创建文件失败")
}
defer func() {
// 2.关闭文件
file.Close()
fmt.Printf("文件关闭")
}()
}
文件打开和关闭
package main
import (
"fmt"
"os"
)
// OS下打开与关闭文件
// 在GO最基层面操作
// os包内File
func main() {
// 1.只读方式打开文件
file, err := os.Open("1.txt")
// 指定方式打开创建追加等模式文件
//os.OpenFile("1.txt", )
if err != nil {
fmt.Println("打开文件失败")
}
defer func() {
// 2.关闭文件
file.Close()
fmt.Printf("文件关闭")
}()
}
文件关闭 func (f *File) Close() error
读取打开的文件
- func (f *File) Read(b []byte) (n int, err error)
- func (f *File) ReadAt(b []byte, off int64) (n int, err error)
package main
import (
"fmt"
"log"
"os"
)
func main() {
// 1.只读方式打开文件
file, err := os.Open("1.txt")
if err != nil {
fmt.Println("文件打开失败" + err.Error())
return
}
defer func() {
file.Close()
fmt.Println("文件关闭")
}()
// 只读方式打开的文件,写文件出错
//_, err = file.WriteString("heheheh")
//if err != nil {
// log.Fatal(err)
//}
bytes := make([]byte, 100)
count, err := file.Read(bytes)
if err != nil {
log.Fatal(err)
}
fmt.Printf("打开文件总共数量:%d , %s\n", count, bytes)
}
写入打开的文件
- 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)
package main
import (
"fmt"
"os"
)
func main() {
// 创建文件,当12.txt不存在时就新建一个文件
// 当12.txt已存在时则清空原来
file, err := os.Create("12.txt")
if err != nil {
fmt.Println("创建文件失败")
}
defer func() {
// 2.关闭文件
file.Close()
fmt.Printf("文件关闭")
}()
// func (f *File) Write(b []byte) (n int, err error)
bytes := []byte{'x', 'q', 'w', 's', 'f', 'e', '\n'}
file.Write(bytes)
// func (f *File) WriteString(s string) (ret int, err error)
file.WriteString("hello world!\n")
file.WriteString("hello world!\n")
file.WriteString("hello world!\n")
file.WriteString("hello world!\n")
file.WriteString("hello world!\n")
file.WriteString("hello world!\n")
// func (f *File) WriteAt(b []byte, off int64) (n int, err error)
// 将字节切片byte中内容写到file内的从文件开头偏移为off处
file.WriteAt([]byte{'@','%','&'}, 2)
}
12.txt内容为