gpt4 book ai didi

windows - Filepath.Walk in Go 不拾取 C : drive properly in Windows 下的文件夹

转载 作者:IT王子 更新时间:2023-10-29 02:27:50 29 4
gpt4 key购买 nike

我在 Go 中使用 Filepath.Walk 尝试递归地获取 C: 下的所有文件夹。然而,它只是返回以 $Recycle.Bin 开头的子文件夹。我在这里做错了什么?

package main

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

func main() {
array := Subfolders("C:")
for _,value := range array {
fmt.Println(value)
}
}

func Subfolders(path string) (paths []string) {
filepath.Walk(path, func(newPath string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
paths = append(paths, newPath)
}
return nil
})
return paths
}

Output:
C:
C:\$Recycle.Bin
C:\$Recycle.Bin\S-1-5-21-310629982-3373693989-3733510080-1000
C:\$Recycle.Bin\S-1-5-21-310629982-3373693989-3733510080-1000\$R0L9M20
C:\$Recycle.Bin\S-1-5-21-310629982-3373693989-3733510080-1000\$R22ZOD9
C:\$Recycle.Bin\S-1-5-21-310629982-3373693989-3733510080-1000\$R3LS9P4
C:\$Recycle.Bin\S-1-5-21-310629982-3373693989-3733510080-1000\$R4T2IGU
C:\$Recycle.Bin\S-1-5-21-310629982-3373693989-3733510080-1000\$R8TZIET
C:\$Recycle.Bin\S-1-5-21-310629982-3373693989-3733510080-1000\$R9QQZB9
C:\$Recycle.Bin\S-1-5-21-310629982-3373693989-3733510080-1000\$RA71HY3
C:\$Recycle.Bin\S-1-5-21-310629982-3373693989-3733510080-1000\$RBOC0V4.com
C:\$Recycle.Bin\S-1-5-21-310629982-3373693989-3733510080-1000\$RBOC0V4.com\go-fsnotify
C:\$Recycle.Bin\S-1-5-21-310629982-3373693989-3733510080-1000\$REJFS3Z
C:\$Recycle.Bin\S-1-5-21-310629982-3373693989-3733510080-1000\$RF9A1Y6
C:\$Recycle.Bin\S-1-5-21-310629982-3373693989-3733510080-1000\$ROMESWQ
C:\$Recycle.Bin\S-1-5-21-310629982-3373693989-3733510080-1000\$RP4CYID
C:\$Recycle.Bin\S-1-5-21-310629982-3373693989-3733510080-1000\$RQHMPV5
C:\$Recycle.Bin\S-1-5-21-310629982-3373693989-3733510080-1000\$RV0K99H
C:\$Recycle.Bin\S-1-5-21-310629982-3373693989-3733510080-1000\$RX54T04

我在 C: 下还有许多其他文件夹,这些文件夹不会被 filepath.walk 选中。我想了解其背后的原因。

编辑


感谢您的回答,我能够解决以下问题:-

func Subfolders(path string) (paths []string) {
filepath.Walk(path, func(newPath string, info os.FileInfo, err error) error {
if err != nil {
log.Println(err)
return filepath.SkipDir
}

if info.IsDir() {
paths = append(paths, newPath)
}
return nil
})

最佳答案

您盲目地返回错误而不记录它们。从回调返回非 nil 错误是 filepath.Walk 中止的信号。

可能有一些您无权访问的文件或其他内容。

关于windows - Filepath.Walk in Go 不拾取 C : drive properly in Windows 下的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33171991/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com