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))
}
分类: file文件

0 条评论

发表回复

您的电子邮箱地址不会被公开。