os.walk()
在"C:\Users\confusedDev\Documents"
上,我看到["My Music", "My Pictures"...]
被返回为子目录,但它们实际上并没有被访问。经过一些研究,我发现它们实际上是Windows中的junctions。
我的理解是,junction是一个指向目录的符号链接,默认情况下会被os.walk()
忽略,但以下测试未能证明:
>>> os.path.islink("C:\\Users\\confusedDev\\Documents\\My Pictures")
False
嗯... os.walk()
怎么知道"C:\Users\confusedDev\Documents\My Pictures"是一个指向"C:\Users\confusedDev\Pictures"的符号链接并需要跳过呢? 我想调用同样的api...目前,我的解决方法仅假设如果os.walk()
跳过一个目录,则它是一个联接点
os.[l]stat
的实现在内部不一致。对于follow_symlinks
,它将任何重分析点处理为链接,而不是正确地限制为仅符号链接和[某些]连接点。此外,在创建 stat 结果时,它仅接受符号链接重分析点作为S_IFLNK
模式标志,这是islink
检查的内容。它还应该接受连接点,但仅当它们实现传统链接时,即不是目标为 "\?\Volume{...}" 挂载点并且GetVolumeNameForVolumeMountPoint
将成功时。 - Eryk Sun