我有通过shell API枚举Favorites文件夹(递归)的代码。我使用GetAttributesOf
函数来获取我找到的每个对象的属性。
因为我从不向前推进,我的期望是我遇到的所有项目都是文件系统对象。对于所有子目录而言,这可能并非如此,但我相信这个问题确实存在。
尽管我有信心,但我确认属性包括SFGAO_FILESYSTEM
。如果他们不这样做,那么我会记录一条消息并跳过该项目,因为没有希望能够完成我的工作。我希望我永远不会看到日志记录或者必须跳过一个项目,但无论如何我都会进行验证,因为这就是我的滚动方式。
由于我最初写这个问题,我们已经看到了枚举中的几个项目声称不是文件系统项的情况。麻烦似乎持续很短的时间,但足够长,可以搞砸多达六个项目的旗帜。
文件何时不是文件系统对象?
答案 0 :(得分:1)
目前还不清楚你是在遗留文件系统还是NTFS上,但是有一些东西可能会破坏文件系统位 - Vista引入了符号链接,这与常规快捷方式不同,因为它们解析了“客户端” “它们本身可能不算作文件系统对象。与目录重新分析点类似。 SFGAO枚举并不完全是对NTFS中发生的事情的1:1表示,因此请将其信息与盐分相提并论。
还有一个外部机会,坏块可能导致Windows报告文件系统位不一致。如果相同的文件有时被报告为文件系统对象,有时不会报告,那么这就成了你唯一的解释。
答案 1 :(得分:0)
你是递归地做这件事吗?
如果您进入存档(例如zip或cab文件),您将看到非文件系统对象。
同样,如果你进入一个带有desktop.ini文件的目录,你可能会看到非文件系统对象(但它取决于desktop.ini所引用的COM对象的作用)。
虽然在这两种情况下,如果您尝试将对象作为文件访问,您可能会看到未找到错误而不是访问被拒绝。您是否有可能对违规对象没有文件系统权限?
符号链接和重新分析点等NTFS功能被报告为文件系统对象,所以它们肯定不是问题。