Go目錄文件路徑操作的實(shí)現(xiàn)
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()
修改文件或目錄權(quán)限
package main
import (
"fmt"
"os"
)
var FileMode os.FileMode = 0400 // go的Windows權(quán)限模式不同于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權(quán)限模式不同于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()
創(chuàng)建目錄
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()
遞歸創(chuàng)建目錄
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()
創(chuàng)建文件
用Create()函數(shù)創(chuàng)建一個(gè)名為name的文件,默認(rèn)采用模式0666。如果文件已存在,則它會(huì)被重置為空文件。如果成功,則返回的文件描述符對(duì)象可用于文件的讀寫。
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()
獲取路徑的絕對(duì)路徑
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()
返回路徑的簡(jiǎn)潔模式
package main
import (
"fmt"
"path/filepath"
)
func main() {
f := filepath.Clean("./search/../data")
fmt.Println(f) // search
}
filepath.Dir()
返回路徑的上級(jí)目錄
package main
import (
"fmt"
"path/filepath"
)
func main() {
f := filepath.Dir("./search/default.go")
fmt.Println(f) // search
}
filepath.Ext()
返回文件的擴(kuò)展名
package main
import (
"fmt"
"path/filepath"
)
func main() {
f := filepath.Ext("./search/default.go")
fmt.Println(f) // .go
}
filepath.FromSlash()
路徑使用系統(tǒng)兼容的路徑連接符
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()
絕對(duì)路徑判斷
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
}到此這篇關(guān)于Go目錄文件路徑操作的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Go目錄文件路徑操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語(yǔ)言并發(fā)編程之控制并發(fā)數(shù)量實(shí)現(xiàn)實(shí)例
這篇文章主要為大家介紹了Go語(yǔ)言并發(fā)編程之控制并發(fā)數(shù)量實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Go?Excelize?API源碼閱讀SetSheetViewOptions示例解析
這篇文章主要為大家介紹了Go-Excelize?API源碼閱讀SetSheetViewOptions示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Go語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)開點(diǎn)線段樹詳解
線段樹是一種用于高效處理區(qū)間查詢和區(qū)間更新的數(shù)據(jù)結(jié)構(gòu),下面我們就來(lái)看看如何使用Go實(shí)現(xiàn)動(dòng)態(tài)開點(diǎn)線段樹的方式,感興趣的可以了解下2025-02-02
詳解Go語(yǔ)言中關(guān)于包導(dǎo)入必學(xué)的 8 個(gè)知識(shí)點(diǎn)
這篇文章主要介紹了詳解Go語(yǔ)言中關(guān)于包導(dǎo)入必學(xué)的 8 個(gè)知識(shí)點(diǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
基于Go和PHP語(yǔ)言實(shí)現(xiàn)爬樓梯算法的思路詳解
這篇文章主要介紹了Go和PHP 實(shí)現(xiàn)爬樓梯算法,本文通過(guò)動(dòng)態(tài)規(guī)劃和斐波那契數(shù)列兩種解決思路給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
golang API請(qǐng)求隊(duì)列的實(shí)現(xiàn)
本文主要介紹了golang API請(qǐng)求隊(duì)列的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04

