Go語言編程中判斷文件是否存在是創(chuàng)建目錄的方法
判斷文件是否存在
os.IsExists()函數(shù)和os.IsNotExists(),他們的函數(shù)的原形是func IsExist(err error) bool func IsNotExist(err error) bool 都是傳入一個err返回bool 這里注意了 err已經(jīng)定義好了
/*
var (
ErrInvalid = errors.New("invalid argument")
ErrPermission = errors.New("permission denied")
ErrExist = errors.New("file already exists")
ErrNotExist = errors.New("file does not exist")
)
*/
這里我們看到了errors這個包,那我們講一下這個包,這個包就一個方法就是errors.New()函數(shù)原形是func New(text string) error實例代碼
import (
"errors"
"fmt"
)
func main() {
//這里就一個方法func New(text string) error 我們可以自己定義
err := errors.New("widuu blog only golang")
if err != nil {
fmt.Println(err) //這里就是輸出了我們自己定義的錯誤信息 //widuu blog only golang
}
}
下面通過實例代碼講解一下
import (
"fmt"
"os"
)
func main() {
_, err := os.Open("widuu.go")
if err != nil {
fmt.Println(os.IsNotExist(err)) //true 證明文件已經(jīng)存在
fmt.Println(err) //open widuu.go: no such file or directory
}
//這個時候你可以這樣判斷文件是否存在
f, err := os.Open("widuu.go")
if err != nil && os.IsNotExist(err) {
fmt.Println(f, "文件不存在") //為什么打印nil 是這樣的如果file不存在 返回f文件的指針是nil的 所以我們不能使用defer f.Close()會報錯的
}
//我們弄出一個文件已經(jīng)存在的錯誤來實驗os.IsExists() 如下是Os定義的常量
/*
var (
ErrInvalid = errors.New("invalid argument")
ErrPermission = errors.New("permission denied")
ErrExist = errors.New("file already exists")
ErrNotExist = errors.New("file does not exist")
)
*/
fmt.Println(os.IsExist(os.ErrExist)) //這里就會輸出true
//我們后邊馬上提到link
err = os.Link("osexists.go", "1.go")
if err != nil {
fmt.Println(os.IsExist(err)) //因為我1.go這個文件存在了 所以說返回true
}
}
創(chuàng)建目錄
os.Mkdir創(chuàng)建單個目錄函數(shù)原形func Mkdir(name string, perm FileMode) error輸入一個目錄的名稱和目錄的權(quán)限,我們可以用默認的os.ModePerm然后返回的是一個error的信息,我們看下,也一塊復(fù)習(xí)前邊的一點知識
import (
"fmt"
"os"
)
func main() {
var path string
if os.IsPathSeparator('\\') { //前邊的判斷是否是系統(tǒng)的分隔符
path = "\\"
} else {
path = "/"
}
fmt.Println(path)
dir, _ := os.Getwd() //當前的目錄
err := os.Mkdir(dir+path+"md", os.ModePerm) //在當前目錄下生成md目錄
if err != nil {
fmt.Println(err)
}
fmt.Println("創(chuàng)建目錄" + dir + path + "md成功")
}
os.MkdirAll()函數(shù)原形是func MkdirAll(path string, perm FileMode) error輸入的是多級目錄結(jié)構(gòu)和權(quán)限返回的是error的信息
import (
"fmt"
"os"
)
func main() {
dir, _ := os.Getwd()
err := os.MkdirAll(dir+"/a/b/c", os.ModePerm) //生成多級目錄
if err != nil {
fmt.Println(err)
}
fmt.Println("創(chuàng)建文件夾" + dir + "/a/b/c成功")
}
相關(guān)文章
golang?cache帶索引超時緩存庫實戰(zhàn)示例
這篇文章主要為大家介紹了golang?cache帶索引超時緩存庫實戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09使用Go重構(gòu)流式日志網(wǎng)關(guān)的實戰(zhàn)分享
流式日志網(wǎng)關(guān)的主要功能是提供?HTTP?接口,接收?CDN?邊緣節(jié)點上報的各類日志(訪問日志/報錯日志/計費日志等),將日志作預(yù)處理并分流到多個的?Kafka?集群和?Topic?中,本文就給大家分享如何使用?Go?重構(gòu)流式日志網(wǎng)關(guān)2023-06-06go?goquery網(wǎng)頁解析實現(xiàn)示例
這篇文章主要為大家介紹了go?goquery網(wǎng)頁解析實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08Go語言函數(shù)的延遲調(diào)用(Deferred Code)詳解
本文將介紹Go語言函數(shù)和方法中的延遲調(diào)用,正如名稱一樣,這部分定義不會立即執(zhí)行,一般會在函數(shù)返回前再被調(diào)用,我們通過一些示例來了解一下延遲調(diào)用的使用場景2022-07-07Go語言reflect.TypeOf()和reflect.Type通過反射獲取類型信息
這篇文章主要介紹了Go語言reflect.TypeOf()和reflect.Type通過反射獲取類型信息,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Golang語言JSON解碼函數(shù)Unmarshal的使用
本文主要介紹了Golang語言JSON解碼函數(shù)Unmarshal的使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01