写了一个文件遍历的,发现死循环。 排查问题发现是 s.IsDir()
问题
if s, err := os.Stat(path); err==nil{
// 抛出错误
}else{
return s.IsDir()
}
go 只提供了一个 s.IsDir() 。 但其实是系统除了目录和文件(侠义上的文件还有 socket文件,链接文件,回收站,块设备等等
然后我从系统更目录扫描,出现
...... 无数相同输出
### \$Recycle.Bin
文件夹 \$Recycle.Bin
文件夹 \$Recycle.Bin\S-1-5-18
### \$Recycle.Bin
文件夹 \$Recycle.Bin
文件夹 \$Recycle.Bin\S-1-5-18
### \$Recycle.Bin
文件夹 \$Recycle.Bin
文件夹 \$Recycle.Bin\S-1-5-18
### \$Recycle.Bin
文件夹 \$Recycle.Bin
文件夹 \$Recycle.Bin\S-1-5-18
### \$Recycle.Bin
FAIL Cherry/Core/Choreser 3.454s
...... 无数相同输出
os
包里FileInfo
和FileMode
里不是有这块的处理么看下
FileMode
里的定义os.Stat
和os.Lstat
两个函数用来获取文件类型,但是os.Stat
具有穿透连接能力,如果你去获取一个软链的FileInfo
,他会返回软链到的文件的信息,你既然想知道他的具体类型,就要使用os.Lstat
回到你上面的代码.
err==nil
是抛出错误?然后再去判断是不是目录? 这块的逻辑是不是有问题,你看下官方的示例吧.