Go目录文件路径操作的实现
作者:Looooking
在Go语言中,可以使用绝对路径或相对路径来表示文件路径,本文就来介绍一下Go目录文件路径操作,感兴趣的可以了解一下
os.ReadDir()
读取目录
package main import ( "fmt" "os" ) func main() { dirs, err := os.ReadDir("./search") if err != nil { fmt.Println(err) } for _, dir := range dirs { fileinfo, _ := dir.Info() fmt.Println(fileinfo) fmt.Println("is_dir:", dir.IsDir(), "name:", dir.Name()) } }
os.Chdir()
切换目录
package main import ( "fmt" "os" ) func main() { currentDir, _ := os.Getwd() fmt.Println("current_dir:", currentDir) // current_dir: D:\Project\test_go\test err := os.Chdir("./search") if err != nil { fmt.Println(err) } currentDir, _ = os.Getwd() fmt.Println("current_dir:", currentDir) // current_dir: D:\Project\test_go\test\search }
os.Chmod()
修改文件或目录权限
package main import ( "fmt" "os" ) var FileMode os.FileMode = 0400 // go的Windows权限模式不同于Linux, 0200和0600读写,0400只读 func main() { const FilePath = "./search/default.go" fileinfo, _ := os.Stat(FilePath) fmt.Println(fileinfo.Mode()) // -rw-rw-rw- err := os.Chmod(FilePath, FileMode) if err != nil { fmt.Println(err) } fileinfo, _ = os.Stat(FilePath) fmt.Println(fileinfo.Mode()) // -r--r--r-- }
package main import ( "fmt" "os" ) var FileMode os.FileMode = 0400 // go的Windows权限模式不同于Linux, 0200和0600读写,0400只读 func main() { const FilePath = "./search" fileinfo, _ := os.Stat(FilePath) fmt.Println(fileinfo.Mode()) // drwxrwxrwx err := os.Chmod(FilePath, FileMode) if err != nil { fmt.Println(err) } fileinfo, _ = os.Stat(FilePath) fmt.Println(fileinfo.Mode()) // dr-xr-xr-x }
os.Mkdir()
创建目录
package main import ( "log" "os" ) var DirMode os.FileMode = 0755 func main() { err := os.Mkdir("test", DirMode) if err != nil { log.Print(err) } }
os.MkdirAll()
递归创建目录
package main import ( "log" "os" ) var DirMode os.FileMode = 0755 func main() { err := os.MkdirAll("test/test/test", DirMode) if err != nil { log.Print(err) } }
os.Remove()
删除目录或文件
package main import ( "log" "os" ) func main() { err := os.Remove("test/test/test") if err != nil { log.Print(err) } }
os.RemoveAll()
递归删除目录
package main import ( "log" "os" ) func main() { err := os.RemoveAll("test") if err != nil { log.Print(err) } }
os.Rename()
目录重命名
package main import ( "log" "os" ) func main() { oldName := "test" newName := "dir" err := os.Rename(oldName, newName) if err != nil { log.Fatal(err) } }
文件操作
os.ReadFile()
读取文件
package main import ( "fmt" "os" ) func main() { data, err := os.ReadFile("test.txt") if err != nil { fmt.Println(err) } fmt.Println(string(data)) // hello world }
os.WriteFile()
写文件
package main import ( "fmt" "io/fs" "os" ) func main() { err := os.WriteFile("test.txt", []byte("hello world"), fs.ModeType) if err != nil { fmt.Println(err) } }
os.Create()
创建文件
用Create()函数创建一个名为name的文件,默认采用模式0666。如果文件已存在,则它会被重置为空文件。如果成功,则返回的文件描述符对象可用于文件的读写。
package main import ( "fmt" "os" ) func main() { fp, err := os.Create("./test.txt") if err != nil { fmt.Println("file create failed") } fmt.Printf("%T", fp) // *os.File defer fp.Close() }
文件路径操作
filepath.Abs()
获取路径的绝对路径
package main import ( "fmt" "path/filepath" ) func main() { f, _ := filepath.Abs("./search") fmt.Println(f) // D:\Project\test_go\test\search }
filepath.Join()
路径拼接
package main import ( "fmt" "path/filepath" ) func main() { f := filepath.Join("test", "search", "default.go") fmt.Println(f) // test\search\default.go }
filepath.Base()
返回路径 basename
package main import ( "fmt" "path/filepath" ) func main() { f := filepath.Base("D:\\Project\\test_go\\test\\search") fmt.Println(f) // search }
filepath.Clean()
返回路径的简洁模式
package main import ( "fmt" "path/filepath" ) func main() { f := filepath.Clean("./search/../data") fmt.Println(f) // search }
filepath.Dir()
返回路径的上级目录
package main import ( "fmt" "path/filepath" ) func main() { f := filepath.Dir("./search/default.go") fmt.Println(f) // search }
filepath.Ext()
返回文件的扩展名
package main import ( "fmt" "path/filepath" ) func main() { f := filepath.Ext("./search/default.go") fmt.Println(f) // .go }
filepath.FromSlash()
路径使用系统兼容的路径连接符
package main import ( "fmt" "path/filepath" ) func main() { f := filepath.FromSlash("./search/default.go") fmt.Println(f) // .\search\default.go }
filepath.Split()
获取路径中的目录和文件
package main import ( "fmt" "path/filepath" ) func main() { dir, file := filepath.Split("./search/default.go") fmt.Println(dir) // ./search/ fmt.Println(file) // default.go }
filepath.Glob()
通配文件
package main import ( "fmt" "path/filepath" ) func main() { files, _ := filepath.Glob("./search/*.go") for _, file := range files { fmt.Println(file) } // search\default.go // search\feed.go // search\match.go // search\search.go }
filepath.IsAbs()
绝对路径判断
package main import ( "fmt" "path/filepath" ) func main() { isAbs := filepath.IsAbs("./search/match.go") fmt.Println("isAbsDir:", isAbs) // isAbsDir: false abspath, _ := filepath.Abs("./search/match.go") fmt.Println(abspath) // D:\MyProject\Go\test\search\match.go isAbs = filepath.IsAbs("D:\\MyProject\\Go\\test\\search\\match.go") fmt.Println("isAbsDir:", isAbs) // isAbsDir: true }
filepath.Walk()
目录遍历
package main import ( "fmt" "os" "path/filepath" ) func main() { root := `./test` err := filepath.Walk(root, scan) if err != nil { fmt.Printf("filepath.Walk() return %v\n", err) //scaned dir: ./test //scaned dir: test\test //scaned dir: test\test\test //scaned file: test\test\test\test.txt } } func scan(path string, f os.FileInfo, err error) error { if f.IsDir() { fmt.Printf("scaned dir: %s\n", path) } else { fmt.Printf("scaned file: %s\n", path) } return nil }
到此这篇关于Go目录文件路径操作的实现的文章就介绍到这了,更多相关Go目录文件路径操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!