咔咔博客之文件打开与关闭
案例
文件的操作使用os包
package main
import (
"fmt"
"os"
"time"
)
func main() {
file, e := os.Open("D:/kaka.txt")
if e != nil {
fmt.Println("文件打开失败")
} else {
fmt.Println("文件打开成功")
}
defer func() {
file.Close()
fmt.Println("文件已关闭")
}()
fmt.Println("愉快滴欣赏avi艺术")
time.Sleep(3 * time.Second)
}
注意点
在os.open时,如果你的操作系统时windows这个时候不要打开文件直接复制文件路径,会报一个文件目录的错误
The filename, directory name, or volume label syntax is incorrect.
在打开文件的路径必须自己手动输入,因为编码有问题
打开文件也必须关闭文件,所以在任何时候打开一个文件操作后使用延迟执行的defer来进行关闭文件
defer是延迟执行的关键词,在所有程序都执行完才会执行的代码
文件打开模式
- O_RDONLY int = syscall.O_RDONLY // 只读模式
- O_WRONLY int = syscall.O_WRONLY // 只写模式
- O_RDWR int = syscall.O_RDWR // 读写模式
- O_APPEND int = syscall.O_APPEND //追加模式
- O_CREATE int = syscall.O_CREAT // 创建模式,如果文件不存在的话
- O_TRUNC int = syscall.O_TRUNC // 覆盖模式
文件权限
权限详解有什么问题可以看这篇文章,详细的说明了权限的问题。
这里简单的说一下 r w x 分别代表的是什么意思
r表示可读
w表示可写
x表示可执行
任何文件都有使用者,群组,other的概念。 权限所代表的是r = 4 w = 2 x = 1 这块的知识是在linux写过的,就不在继续讨论了。
文件读取
func main() {
file, e := os.OpenFile("D:/kaka.txt", os.O_RDONLY, 0666)
if e != nil {
fmt.Println("文件打开失败:err", e)
return
} else {
fmt.Println("文件打开成功")
}
// 打开时立刻挂起关闭程序
defer func() {
file.Close()
fmt.Println("文件关闭成功")
}()
// 创建文件的读取器
reader := bufio.NewReader(file)
// 死循环读取
for {
// 以换行符为界,分批次读取数据,得到readString
readString, e := reader.ReadString('\n')
if e != nil {
fmt.Println("文件读取失败;err", e)
// 如果已到文件末尾,则直接结束
if e == io.EOF {
break
}
}
fmt.Print(readString)
}
fmt.Println("读取结束")
}
简易的数据读取
func main() {
bytes, err := ioutil.ReadFile("d:/kaka.txt")
if err != nil {
fmt.Println("读取失败,err=", err)
return
} else {
contentStr := string(bytes)
fmt.Println(contentStr)
}
}