Golang 计算目录的大小

Golang 计算目录的大小

Golang 计算目录的大小

在日常开发和运维中,经常会遇到需要计算某个目录下所有文件大小的情况,本文将通过使用Golang语言编写一个程序来计算给定目录的大小。

1. 获取文件大小

首先,我们需要编写一个函数来获取文件的大小。这里我们使用os包来操作文件系统,具体的代码如下:

package main

import (
    "fmt"
    "os"
)

func getFileSize(path string) (int64, error) {
    file, err := os.Open(path)
    if err != nil {
        return 0, err
    }
    defer file.Close()

    fileInfo, err := file.Stat()
    if err != nil {
        return 0, err
    }

    return fileInfo.Size(), nil
}

func main() {
    path := "test.txt"
    size, err := getFileSize(path)
    if err != nil {
        fmt.Println("Error:", err)
    } else {
        fmt.Printf("File size of %s: %d bytes\n", path, size)
    }
}

运行上述代码,可以得到输出:

File size of test.txt: 1024 bytes

2. 遍历目录

接下来,我们需要编写一个递归函数来遍历指定目录下的所有文件和子目录,并计算它们的总大小。代码如下所示:

package main

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

func calculateDirectorySize(path string) (int64, error) {
    var totalSize int64

    err := filepath.Walk(path, func(filePath string, fileInfo os.FileInfo, err error) error {
        if err != nil {
            return err
        }

        if !fileInfo.IsDir() {
            size, err := getFileSize(filePath)
            if err != nil {
                return err
            }
            totalSize += size
        }

        return nil
    })

    if err != nil {
        return 0, err
    }

    return totalSize, nil
}

func main() {
    path := "/path/to/directory"
    size, err := calculateDirectorySize(path)
    if err != nil {
        fmt.Println("Error:", err)
    } else {
        fmt.Printf("Total size of %s: %d bytes\n", path, size)
    }
}

在上述代码中,filepath.Walk函数会递归地遍历指定目录下的所有文件和子目录,然后调用getFileSize函数来获取文件的大小,并将其累加到totalSize变量中。

3. 完整代码

下面是完整的计算目录大小的Golang程序:

package main

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

func getFileSize(path string) (int64, error) {
    file, err := os.Open(path)
    if err != nil {
        return 0, err
    }
    defer file.Close()

    fileInfo, err := file.Stat()
    if err != nil {
        return 0, err
    }

    return fileInfo.Size(), nil
}

func calculateDirectorySize(path string) (int64, error) {
    var totalSize int64

    err := filepath.Walk(path, func(filePath string, fileInfo os.FileInfo, err error) error {
        if err != nil {
            return err
        }

        if !fileInfo.IsDir() {
            size, err := getFileSize(filePath)
            if err != nil {
                return err
            }
            totalSize += size
        }

        return nil
    })

    if err != nil {
        return 0, err
    }

    return totalSize, nil
}

func main() {
    path := "/path/to/directory"
    size, err := calculateDirectorySize(path)
    if err != nil {
        fmt.Println("Error:", err)
    } else {
        fmt.Printf("Total size of %s: %d bytes\n", path, size)
    }
}

4. 总结

通过本文的介绍,我们学习了如何使用Golang编写一个程序来计算给定目录的大小。首先,我们要获取文件的大小,然后使用递归函数遍历指定目录下的所有文件和子目录,并计算它们的总大小。这个程序可以帮助我们快速地获取目录的大小信息,方便进行日常开发和运维工作。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程