NotePublic/Software/Development/Language/Go/Basic/Go_文件操作.md

153 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Go 文件操作
os.File 封装了所有文件相关的操作File 是一个结构体,有很多方法。
## 1.os 包
### 1.1.创建文件
```go
func Create(name string) (file *File, err error)
func NewFile(fd uintptr, name string) *File
```
Create 方法示例如下:
```go
f,err := os.Create(fileName)
defer f.Close()
if err !=nil {
fmt.Println(err.Error())
} else {
_,err=f.Write([]byte("要写入的文本内容"))
checkErr(err)
}
```
### 1.2.打开文件
```go
func Open(name string) (*File, error)
func OpenFile(name string, flag int, perm FileMode) (*File, error)
```
perm 模式如下:
```go
//打开方式
const (
//只读模式
O_RDONLY int = syscall.O_RDONLY // open the file read-only.
//只写模式
O_WRONLY int = syscall.O_WRONLY // open the file write-only.
//可读可写
O_RDWR int = syscall.O_RDWR // open the file read-write.
//追加内容
O_APPEND int = syscall.O_APPEND // append data to the file when writing.
//创建文件,如果文件不存在
O_CREATE int = syscall.O_CREAT // create a new file if none exists.
//与创建文件一同使用,文件必须存在
O_EXCL int = syscall.O_EXCL // used with O_CREATE, file must not exist
//打开一个同步的文件流
O_SYNC int = syscall.O_SYNC // open for synchronous I/O.
//如果可能,打开时缩短文件
O_TRUNC int = syscall.O_TRUNC // if possible, truncate file when opened.
)
```
### 1.3.获取文件状态
```go
func (f *File) Stat() (fi FileInfo, err error)
```
### 1.4.读取文件
```go
func (f *File) Read(b []byte) (n int, err error)
```
### 1.5.写入文件
```go
func (f *File) Write(b []byte) (n int, err error)
```
### 1.6.设置读写位置
```go
/**
* @param whence
* os.SEEK_SET: seek relative to the origin of the file
* os.SEEK_CUR: seek relative to the current offset
* os.SEEK_END: seek relative to the end
*/
func (f *File) Seek(offset int64, whence int) (ret int64, err error)
```
## 2.ioutil 包
### 2.1.读取
示例如下:
```go
package main
import(
"io/ioutil"
"fmt"
)
func main(){
b,err := ioutil.ReadFile("C:/example.txt")
if err != nil{
fmt.Println(err)
}
fmt.Println(b)
fmt.Println(string(b))
}
```
### 2.2.写入
示例如下:
```go
package main
import(
"io/ioutil"
"fmt"
)
func main(){
str := []byte("Hello,Go!")
err := ioutil.WriteFile("C:/example.txt", str, 0644)
if err != nil{
panic(err)
}else{
fmt.Println("WriteFile Success!")
}
}
```
## 3.bufio 包
### 3.1.读文件
```go
func NewReader(rd io.Reader) *Reader
func (b *Reader) Read(p []byte) (n int, err error)
func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error)
```
### 3.2.写文件
```go
func NewWriter(w io.Writer) *Writer
func (b *Writer) Write(p []byte) (nn int, err error)
```