golang怎麼刪除檔案

2022-12-19 14:00:55

在golang中,可以利用os包中內建的Remove()或RemoveAll()函數來刪除檔案,語法「os.Remove(path)」或「os.RemoveAll(path)」。在刪除檔案時,RemoveAll()和Remove()方法沒有太大的區別;但是在刪除目錄時,Remove()只能刪除空目錄,而RemoveAll()不受任何限制,都可以刪除。

php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

在golang中,檔案刪除、檔案建立、檔案讀取和檔案寫入等,幾乎所有的檔案操作都是通過 os 包完成的。 所以如果要在 Golang 中管理檔案,需要使用 Golang 內建的 os 包。

要在 Golang 中刪除檔案,請使用 os.Remove() 或os.RemoveAll()函數。 os.Remove()和os.RemoveAll()函 是內建的 Golang 函數,用於刪除檔案。 提供該檔案的檔案路徑,可以刪除該檔案。 它刪除命名檔案或(空)目錄。

RemoveAll 函數跟 Remove 用法一樣,區別是會遞迴的刪除所有子目錄和檔案。今天我們就來看看二者的具體差異有哪些。

刪除檔案

os.Remove()

接下來,我們使用 os.Remove() 方法刪除一個檔案,因為我們要用程式碼進行驗證,在刪除前,我們首先需要建立一個檔案 test.txt,然後刪除它。下面是具體的程式碼:

package main

import ( 
    "os"
    "fmt"
)
 
func main () {
 
	testFile := "test.txt"
	_, err := os.Create(testFile) //建立檔案
	if err != nil {
		fmt.Println("檔案建立失敗")
	}
	
        // 使用 os.Remove() 刪除檔案
        err = os.Remove(testFile)
 
	if err != nil {
		fmt.Println("刪除失敗")
	} else {
		fmt.Println("刪除成功")
	}
}
登入後複製

os.RemoveAll()

好了,通過上面的例子,我們可以看到 os.Remove() 方法刪除檔案還是很方便的。那麼,我們接下來看看 os.RemoveAll() 表現如何,還是剛才的程式碼,我們把刪除方法替換一下。修改後程式碼如下:

package main

import (
	"os"
	"fmt"
)
 
func main () {
 
	testFile := "test.txt"
	_, err := os.Create(testFile) //建立檔案
	if err != nil {
		fmt.Println("檔案建立失敗")
	}
	
        // 使用 os.RemoveAll() 刪除檔案
	err = os.RemoveAll(testFile)
 
	if err != nil {
		fmt.Println("刪除失敗")
	} else {
		fmt.Println("刪除成功")
	}
}
登入後複製

程式碼執行結果:

1.png

刪除目錄

os.Remove()

如果使用 os.Remove() 刪除目錄是什麼效果呢?接下來直接看程式碼!

範例程式碼:

package main

import (
	"os"
	"fmt"
)
 
func main () {
 
	testDir := "d1/d2/d3"
	// 建立多級目錄
	err := os.MkdirAll(testDir, os.ModePerm)
	if 	err != nil {
		fmt.Println("檔案建立失敗", err)
	}
        // 使用 os.Remove() 刪除檔案
	err = os.Remove(testDir)
 
	if err != nil {
		fmt.Println("刪除失敗", err)
	} else {
		fmt.Println("刪除成功")
	}
}
登入後複製

程式碼執行結果:

2.png

os.RemoveAll()

那麼,os.RemoveAll() 方法刪除目錄是什麼效果呢?也直接看程式碼吧!

範例程式碼:

package main

import (
	"os"
	"fmt"
)
 
func main () {
 
	testDir := "d1/d2/d3"
	// 建立多級目錄
	err := os.MkdirAll(testDir, os.ModePerm)
	if 	err != nil {
		fmt.Println("檔案建立失敗", err)
	}
        // 使用 os.RemoveAll() 刪除檔案
	err = os.RemoveAll(testDir)
 
	if err != nil {
		fmt.Println("刪除失敗")
	} else {
		fmt.Println("刪除成功")
	}
}
登入後複製

程式碼執行結果:

3.png

現在發現,刪除目錄時,兩種方法效果也一樣,是不是二者沒有差別呢?答案是否定的。還是上面刪除目錄程式碼,如果我們刪除的不是目錄 d3,而是目錄 d2,會是什麼結果呢?

修改程式碼後,我們最終發現 os.RemoveAll() 方法完全沒有問題,但是 os.Remove() 報錯了,報錯資訊如下:

remove d1/d2/: directory not empty
登入後複製

是的,目錄 d2 不是空的,因為還有子目錄 d3,至此,我們終於發現了 os.RemoveAll() 和 os.Remove() 的差異是什麼。

說明:

在刪除檔案時,os.RemoveAll() 和 os.Remove() 方法沒有太大的區別。但是在刪除目錄時,os.Remove() 只能刪除空目錄,而 os.RemoveAll() 不受任何限制,都可以刪除。

【相關推薦:Go視訊教學、】

以上就是golang怎麼刪除檔案的詳細內容,更多請關注TW511.COM其它相關文章!