扫描文件
scan1
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"path/filepath"
)
func printFileStats(path string) {
fileInfo, err := os.Stat(path)
if err != nil {
log.Printf("Failed to read file info for %s: %v", path, err)
}
if fileInfo.IsDir() {
dirEntries, err := ioutil.ReadDir(path)
if err != nil {
log.Printf("Failed to read directory entries for %s: %v", path, err)
}
var dirCount, fileCount int
var dirSize, fileSize int64
for _, entry := range dirEntries {
printFileStats(filepath.Join(path, entry.Name()))
if entry.IsDir() {
dirCount++
dirSize += entry.Size()
} else {
fileCount++
fileSize += entry.Size()
}
}
fmt.Printf("Directory %s contains %d subdirectories, %d files (total size %d bytes)\n", path, dirCount, fileCount, dirSize+fileSize)
} else {
fmt.Printf("File %s has size %d bytes\n", path, fileInfo.Size())
}
}
func main() {
var path string
if len(os.Args) > 1 {
path = os.Args[1]
} else {
path = "."
}
printFileStats(path)
}
scan2
package main
import (
"fmt"
"log"
"os"
"path/filepath"
)
func visit(files *[]string) filepath.WalkFunc {
return func(path string, info os.FileInfo, err error) error {
if err != nil {
log.Fatal(err)
}
*files = append(*files, path)
return nil
}
}
func main() {
var files []string
root := "/"
err := filepath.Walk(root, visit(&files))
if err != nil {
panic(err)
}
for _, file := range files {
fmt.Println(file)
}
}