golang 代码片段
原文链接: golang 代码片段
os.OpenFile 文件打开方式(flag)
O_RDONLY 以只读文式打开文件。
O_WRONLY 以只写方式打开文件。
O_RDWR 以读写方式打开文件
O_APPEND 以追加方式打开文件,写入的数据将追加到文件尾。
O_CREATE 当文件不存在时创建文件。
O_EXCL 与 O_CREATE 一起使用,当文件已经存在时 Open 操作失败。
O_SYNC 以同步方式打开文件。每次 write 系统调用后都等待实际的物理 I/O 完成后才返回,默认(不使用该标记)是使用缓冲的,也就是说每次的写操作是写到系统内核缓冲区中,等系统缓冲区满后才写到实际存储设备。
O_TRUNC 如果文件已存在,打开时将会清空文件内容。必须于 O_WRONLY 或 O_RDWR 配合使用。截断文件,需要有写的权限。
读取不存在的文件会报错
fd,err:=os.OpenFile("aaa", os.O_RDONLY, 0666)
读写文件,没有就创建
fd, err = os.OpenFile(curFileName, os.O_RDWR|os.O_CREATE, 0600)
lf, err := os.OpenFile(errLog, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0600)
追加模式
f, err := os.OpenFile(fileName, os.O_WRONLY|os.O_APPEND, 0666)
快速遍历当前文件夹和文件
package main
import (
"fmt"
"path/filepath"
)
func main() {
upperDirPattern := "./*"
matches, err := filepath.Glob(upperDirPattern)
if err != nil {
panic(err)
}
for _, file := range matches {
fmt.Println(file)
}
}
检查文件或目录是否存在
// 如果由 filename 指定的文件或目录存在则返回 true,否则返回 false
func fileExist(filename string) bool {
_, err := os.Stat(filename)
return err == nil || os.IsExist(err)
}
if _, err := os.Stat(dir); !os.IsNotExist(err) {
t.Fatalf("dir should be gone: %v", err)
}
```
### 获取当前目录和父级目录
```go
func substr(s string, pos, length int) string {
runes := []rune(s)
l := pos + length
if l > len(runes) {
l = len(runes)
}
return string(runes[pos:l])
}
func getParentDirectory(dirctory string) string {
return substr(dirctory, 0, strings.LastIndex(dirctory, "/"))
}
func getCurrentDirectory() string {
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
log.Fatal(err)
}
return strings.Replace(dir, "\\", "/", -1)
}