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

194 lines
4.5 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.

# Golang 文件操作
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)
```
flag 如下:
```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.
)
```
perm 模式如下:
```go
const (
// The single letters are the abbreviations
// used by the String method's formatting.
// 文件夹模式
ModeDir FileMode = 1 << (32 - 1 - iota) // d: is a directory
// 追加模式
ModeAppend // a: append-only
// 单独使用
ModeExclusive // l: exclusive use
// 临时文件
ModeTemporary // T: temporary file; Plan 9 only
// 象征性的关联
ModeSymlink // L: symbolic link
// 设备文件
ModeDevice // D: device file
// 命名管道
ModeNamedPipe // p: named pipe (FIFO)
// Unix 主机 socket
ModeSocket // S: Unix domain socket
// 设置uid
ModeSetuid // u: setuid
// 设置gid
ModeSetgid // g: setgid
// UNIX 字符串设备当设备模式是设置unix
ModeCharDevice // c: Unix character device, when ModeDevice is set
// 粘性的
ModeSticky // t: sticky
// 非常规文件;对该文件一无所知
ModeIrregular // ?: non-regular file; nothing else is known about this file
// bit位遮盖不变的文件设置为none
// Mask for the type bits. For regular files, none will be set.
ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice | ModeCharDevice | ModeIrregular
// 权限位
ModePerm FileMode = 0777 // Unix permission bits
)
```
### 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)
```