• Go目录文件路径操作


    目录操作

    os.ReadDir()

    读取目录

    1. package main
    2. import (
    3. "fmt"
    4. "os"
    5. )
    6. func main() {
    7. dirs, err := os.ReadDir("./search")
    8. if err != nil {
    9. fmt.Println(err)
    10. }
    11. for _, dir := range dirs {
    12. fileinfo, _ := dir.Info()
    13. fmt.Println(fileinfo)
    14. fmt.Println("is_dir:", dir.IsDir(), "name:", dir.Name())
    15. }
    16. }

    os.Chdir()

    切换目录

    1. package main
    2. import (
    3. "fmt"
    4. "os"
    5. )
    6. func main() {
    7. currentDir, _ := os.Getwd()
    8. fmt.Println("current_dir:", currentDir) // current_dir: D:\Project\test_go\test
    9. err := os.Chdir("./search")
    10. if err != nil {
    11. fmt.Println(err)
    12. }
    13. currentDir, _ = os.Getwd()
    14. fmt.Println("current_dir:", currentDir) // current_dir: D:\Project\test_go\test\search
    15. }

    os.Chmod()

    修改文件或目录权限

    1. package main
    2. import (
    3. "fmt"
    4. "os"
    5. )
    6. var FileMode os.FileMode = 0400 // go的Windows权限模式不同于Linux, 0200和0600读写,0400只读
    7. func main() {
    8. const FilePath = "./search/default.go"
    9. fileinfo, _ := os.Stat(FilePath)
    10. fmt.Println(fileinfo.Mode()) // -rw-rw-rw-
    11. err := os.Chmod(FilePath, FileMode)
    12. if err != nil {
    13. fmt.Println(err)
    14. }
    15. fileinfo, _ = os.Stat(FilePath)
    16. fmt.Println(fileinfo.Mode()) // -r--r--r--
    17. }
    1. package main
    2. import (
    3. "fmt"
    4. "os"
    5. )
    6. var FileMode os.FileMode = 0400 // go的Windows权限模式不同于Linux, 0200和0600读写,0400只读
    7. func main() {
    8. const FilePath = "./search"
    9. fileinfo, _ := os.Stat(FilePath)
    10. fmt.Println(fileinfo.Mode()) // drwxrwxrwx
    11. err := os.Chmod(FilePath, FileMode)
    12. if err != nil {
    13. fmt.Println(err)
    14. }
    15. fileinfo, _ = os.Stat(FilePath)
    16. fmt.Println(fileinfo.Mode()) // dr-xr-xr-x
    17. }

    os.Mkdir()

    创建目录

    1. package main
    2. import (
    3. "log"
    4. "os"
    5. )
    6. var DirMode os.FileMode = 0755
    7. func main() {
    8. err := os.Mkdir("test", DirMode)
    9. if err != nil {
    10. log.Print(err)
    11. }
    12. }

    os.MkdirAll()

    递归创建目录

    1. package main
    2. import (
    3. "log"
    4. "os"
    5. )
    6. var DirMode os.FileMode = 0755
    7. func main() {
    8. err := os.MkdirAll("test/test/test", DirMode)
    9. if err != nil {
    10. log.Print(err)
    11. }
    12. }

    os.Remove()

    删除目录或文件

    1. package main
    2. import (
    3. "log"
    4. "os"
    5. )
    6. func main() {
    7. err := os.Remove("test/test/test")
    8. if err != nil {
    9. log.Print(err)
    10. }
    11. }

    os.RemoveAll()

    递归删除目录

    1. package main
    2. import (
    3. "log"
    4. "os"
    5. )
    6. func main() {
    7. err := os.RemoveAll("test")
    8. if err != nil {
    9. log.Print(err)
    10. }
    11. }

    os.Rename()

    目录重命名

    1. package main
    2. import (
    3. "log"
    4. "os"
    5. )
    6. func main() {
    7. oldName := "test"
    8. newName := "dir"
    9. err := os.Rename(oldName, newName)
    10. if err != nil {
    11. log.Fatal(err)
    12. }
    13. }

    文件操作

    os.ReadFile()

    读取文件

    1. package main
    2. import (
    3. "fmt"
    4. "os"
    5. )
    6. func main() {
    7. data, err := os.ReadFile("test.txt")
    8. if err != nil {
    9. fmt.Println(err)
    10. }
    11. fmt.Println(string(data)) // hello world
    12. }

    os.WriteFile()

    写文件 

    1. package main
    2. import (
    3. "fmt"
    4. "io/fs"
    5. "os"
    6. )
    7. func main() {
    8. err := os.WriteFile("test.txt", []byte("hello world"), fs.ModeType)
    9. if err != nil {
    10. fmt.Println(err)
    11. }
    12. }

    os.Create()

    创建文件

    用Create()函数创建一个名为name的文件,默认采用模式0666。如果文件已存在,则它会被重置为空文件。如果成功,则返回的文件描述符对象可用于文件的读写。

    1. package main
    2. import (
    3. "fmt"
    4. "os"
    5. )
    6. func main() {
    7. fp, err := os.Create("./test.txt")
    8. if err != nil {
    9. fmt.Println("file create failed")
    10. }
    11. fmt.Printf("%T", fp) // *os.File
    12. defer fp.Close()
    13. }

    os.OpenFile()

    OpenFile() 函数可以指定文件打开模式

    1. package main
    2. import (
    3. "fmt"
    4. "os"
    5. )
    6. func main() {
    7. f, err := os.OpenFile("./test.png", os.O_CREATE | os.O_RDWR, os.ModePerm)
    8. if err != nil {
    9. fmt.Println(err)
    10. }
    11. defer f.Close()
    12. }

    文件路径操作

    filepath.Abs()

    获取路径的绝对路径

    1. package main
    2. import (
    3. "fmt"
    4. "path/filepath"
    5. )
    6. func main() {
    7. f, _ := filepath.Abs("./search")
    8. fmt.Println(f) // D:\Project\test_go\test\search
    9. }

    filepath.Join()

    路径拼接

    1. package main
    2. import (
    3. "fmt"
    4. "path/filepath"
    5. )
    6. func main() {
    7. f := filepath.Join("test", "search", "default.go")
    8. fmt.Println(f) // test\search\default.go
    9. }

    filepath.Base()

    返回路径 basename

    1. package main
    2. import (
    3. "fmt"
    4. "path/filepath"
    5. )
    6. func main() {
    7. f := filepath.Base("D:\\Project\\test_go\\test\\search")
    8. fmt.Println(f) // search
    9. }

    filepath.Clean()

    返回路径的简洁模式

    1. package main
    2. import (
    3. "fmt"
    4. "path/filepath"
    5. )
    6. func main() {
    7. f := filepath.Clean("./search/../data")
    8. fmt.Println(f) // search
    9. }

    filepath.Dir()

    返回路径的上级目录

    1. package main
    2. import (
    3. "fmt"
    4. "path/filepath"
    5. )
    6. func main() {
    7. f := filepath.Dir("./search/default.go")
    8. fmt.Println(f) // search
    9. }

    filepath.Ext()

    返回文件的扩展名

    1. package main
    2. import (
    3. "fmt"
    4. "path/filepath"
    5. )
    6. func main() {
    7. f := filepath.Ext("./search/default.go")
    8. fmt.Println(f) // .go
    9. }

    filepath.FromSlash()

    路径使用系统兼容的路径连接符

    1. package main
    2. import (
    3. "fmt"
    4. "path/filepath"
    5. )
    6. func main() {
    7. f := filepath.FromSlash("./search/default.go")
    8. fmt.Println(f) // .\search\default.go
    9. }

    filepath.Split()

    获取路径中的目录和文件

    1. package main
    2. import (
    3. "fmt"
    4. "path/filepath"
    5. )
    6. func main() {
    7. dir, file := filepath.Split("./search/default.go")
    8. fmt.Println(dir) // ./search/
    9. fmt.Println(file) // default.go
    10. }

    filepath.Glob()

    通配文件

    1. package main
    2. import (
    3. "fmt"
    4. "path/filepath"
    5. )
    6. func main() {
    7. files, _ := filepath.Glob("./search/*.go")
    8. for _, file := range files {
    9. fmt.Println(file)
    10. }
    11. // search\default.go
    12. // search\feed.go
    13. // search\match.go
    14. // search\search.go
    15. }

    filepath.IsAbs()

    绝对路径判断

    1. package main
    2. import (
    3. "fmt"
    4. "path/filepath"
    5. )
    6. func main() {
    7. isAbs := filepath.IsAbs("./search/match.go")
    8. fmt.Println("isAbsDir:", isAbs) // isAbsDir: false
    9. abspath, _ := filepath.Abs("./search/match.go")
    10. fmt.Println(abspath) // D:\MyProject\Go\test\search\match.go
    11. isAbs = filepath.IsAbs("D:\\MyProject\\Go\\test\\search\\match.go")
    12. fmt.Println("isAbsDir:", isAbs) // isAbsDir: true
    13. }

    filepath.Walk()

    目录遍历

    1. package main
    2. import (
    3. "fmt"
    4. "os"
    5. "path/filepath"
    6. )
    7. func main() {
    8. root := `./test`
    9. err := filepath.Walk(root, scan)
    10. if err != nil {
    11. fmt.Printf("filepath.Walk() return %v\n", err)
    12. //scaned dir: ./test
    13. //scaned dir: test\test
    14. //scaned dir: test\test\test
    15. //scaned file: test\test\test\test.txt
    16. }
    17. }
    18. func scan(path string, f os.FileInfo, err error) error {
    19. if f.IsDir() {
    20. fmt.Printf("scaned dir: %s\n", path)
    21. } else {
    22. fmt.Printf("scaned file: %s\n", path)
    23. }
    24. return nil
    25. }

  • 相关阅读:
    Scala入门到放弃—03—面向对象
    mmc命令(do_mmcops函数的源码分析)
    字节架构师分析Spring Boot源码:日志、缓存、Web服务等
    NSSCTF第10页(3)
    数据结构:排序- 插入排序(插入排序and希尔排序) , 选择排序(选择排序and堆排序) , 交换排序(冒泡排序and快速排序) , 归并排序
    apollo 7.0 编译报错zlib-1.2.11.tar下载失败
    反射在Java 中算是黑魔法的存在,你不想了解一下?
    maven环境配置
    超算基础概念
    云原生技术在云计算中的应用探讨
  • 原文地址:https://blog.csdn.net/TomorrowAndTuture/article/details/132147680