Golang程式獲取目錄大小


在Golang中,獲取檔案大小很容易,但獲取目錄的大小稍微複雜一些。本文將使用os.Open()函式、walk函式以及readdir()函式來獲取目錄的大小。

語法

funcReadDir(dirname string) ([]fs.FileInfo, error)

ReadDir()函式位於os包中,用於讀取目錄。該函式接受一個引數,即要讀取的目錄名稱,並返回一個FileInfo列表,表示目錄內容。如果在讀取目錄時發生錯誤,則只返回一個錯誤變數。

示例1

在本例中,我們將編寫一個Go語言程式,使用os包中的open和stat函式來獲取目錄的大小。os包提供了與作業系統互動的函式,包括開啟和讀取檔案和目錄。

package main

import (
   "fmt"
   "os"
)

func main() {
   dir, err := os.Open("new")
   if err != nil {
      fmt.Println(err)
      return
   }
   defer dir.Close()

   fileInfo, err := dir.Stat()
   if err != nil {
      fmt.Println(err)
      return
   }   
   fmt.Println("Directory size:", fileInfo.Size(), "bytes")
}

輸出

Directory size: 4096 bytes

示例2

在本例中,我們將編寫一個Go語言程式,使用path包中的walk函式來獲取目錄的大小。filepath包提供了用於操作檔案路徑的函式,包括遍歷目錄樹。在這種方法中,我們將使用filepath.Walk函式遞迴遍歷目錄樹,並對所有檔案和子目錄的大小求和。

package main

import (
   "fmt"
   "os"
   "path/filepath"
)

func main() {
   var totalSize int64
   err := filepath.Walk("new", func(path string, info os.FileInfo, err error) error {
      if !info.IsDir() {
         totalSize += info.Size()
      }
      return nil
   })
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("Directory size:", totalSize, "bytes")
}

輸出

Directory size: 673 bytes

示例3

在本例中,我們將編寫一個Go語言程式,使用ioutil包中的readdir()函式來獲取目錄的大小。ioutil.ReadDir函式讀取目錄的內容,然後對所有檔案和子目錄的大小求和。

package main

import (
   "fmt"
   "io/ioutil"
)

func main() {
   files, err := ioutil.ReadDir("new")
   if err != nil {
      fmt.Println(err)
      return
   }

   var totalSize int64
   for _, file := range files {
      if !file.IsDir() {
         totalSize += file.Size()
      }
   }
   fmt.Println("Directory size:", totalSize, "bytes")
}

輸出

Directory size: 673 bytes

結論

我們已經成功編譯並執行了一個Go語言程式來獲取目錄的大小,並附帶了示例。這裡我們提到了三種不同的獲取Golang中目錄大小的方法。每種方法都有其優點和缺點,方法的選擇取決於手頭任務的具體需求。無論選擇哪種方法,都必須考慮其是否適合您的特定需求,並適當地處理錯誤,以確保結果可靠且正確。

更新於: 2023年5月3日

2K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.