目录
os包
- 判断文件是否存在
package main
import (
"fmt"
"os"
)
func main() {
// 文件路径
path := "./example.txt"
// 检查文件是否存在
if _, err := os.Stat(path); os.IsNotExist(err) {
// 文件不存在
fmt.Printf("文件 %s 不存在\n", path)
} else {
// 文件存在
fmt.Printf("文件 %s 存在\n", path)
}
}
- 检查目录是否存在
os.stat()
- 文件重命名与删除
os包Rename、Remove、Mkdir
- 文件不存在自动创建
```go
// 如果 path 路径不存在,会有 err,然后通过 IsNotExist 判定文件路径是否存在,如果 true 则不存在,注意用 os.ModePerm 这样文件是可以写入的
if _, err := os.Stat(path); os.IsNotExist(err) {
// mkdir 创建目录,mkdirAll 可创建多层级目录
os.MkdirAll(productPrePath, os.ModePerm)
}
其它
文件编辑
https://blog.csdn.net/youngwhz1/article/details/89706704
文件目录截取
- 获取当前目录和父目录
package main
import (
"fmt"
"log"
"os"
"path/filepath"
"strings"
)
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)
}
func main() {
var str1, str2 string
str1 = getCurrentDirectory()
str2 = getParentDirectory(str1)
fmt.Println(str2)
}
使用filepath库更好
替换文件中的指定字符串
https://www.qetool.com/scripts/view/4155.html
package main
import (
"bufio"
"fmt"
"io"
"os"
"strings"
)
func main() {
if len(os.Args) != 4 {
fmt.Println("lack of config file, eg: go run main.go ${path_of_file} ${old_string} ${new_string}")
os.Exit(-1)
}
fileName := os.Args[1]
in, err := os.Open(fileName)
if err != nil {
fmt.Println("open file fail:", err)
os.Exit(-1)
}
defer in.Close()
out, err := os.OpenFile(fileName+".mdf", os.O_RDWR|os.O_CREATE, 0766)
if err != nil {
fmt.Println("Open write file fail:", err)
os.Exit(-1)
}
defer out.Close()
br := bufio.NewReader(in)
index := 1
for {
line, _, err := br.ReadLine()
if err == io.EOF {
break
}
if err != nil {
fmt.Println("read err:", err)
os.Exit(-1)
}
newLine := strings.Replace(string(line), os.Args[2], os.Args[3], -1)
_, err = out.WriteString(newLine + "\n")
if err != nil {
fmt.Println("write to file fail:", err)
os.Exit(-1)
}
fmt.Println("done ", index)
index++
}
fmt.Println("FINISH!")
}
上面的代码会有问题,输入与输出不能是同一个文件。
文件拷贝
https://zhuanlan.zhihu.com/p/660757280
go-homedir库
https://segmentfault.com/a/1190000021585053
将文件全部读取到一个string中
https://imangodoc.com/fZYIUX4P.html
package main
import (
"fmt"
"io/ioutil"
)
func main() {
// 读取文件内容
content, err := ioutil.ReadFile("filename.txt")
if err != nil {
panic(err)
}
// 输出文件内容
fmt.Println(string(content))
}
0 条评论