(16)Go OS文件基础创建、打开、读写与关闭

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基础上包装的两个函数

文件创建

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

读取打开的文件

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)
}

写入打开的文件

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内容为

猜你喜欢

转载自blog.csdn.net/jadeshu/article/details/106594820