什么时候文件不是文件系统对象?

时间:2011-11-29 03:20:20

标签: file winapi windows-shell filesystemobject

我有通过shell API枚举Favorites文件夹(递归)的代码。我使用GetAttributesOf函数来获取我找到的每个对象的属性。

因为我从不向前推进,我的期望是我遇到的所有项目都是文件系统对象。对于所有子目录而言,这可能并非如此,但我相信这个问题确实存在。

尽管我有信心,但我确认属性包括SFGAO_FILESYSTEM。如果他们不这样做,那么我会记录一条消息并跳过该项目,因为没有希望能够完成我的工作。我希望我永远不会看到日志记录或者必须跳过一个项目,但无论如何我都会进行验证,因为这就是我的滚动方式。

几周后,我出色的QA工程师告诉我,他看到我的程序对某个特定项目行为不端,而且关于它的时间,他在日志中看到该项目没有设置文件系统位和不得不跳过。有问题的项目,我们有充分的理由相信,一个档案。

由于我最初写这个问题,我们已经看到了枚举中的几个项目声称不是文件系统项的情况。麻烦似乎持续很短的时间,但足够长,可以搞砸多达六个项目的旗帜。

文件何时不是文件系统对象?

2 个答案:

答案 0 :(得分:1)

目前还不清楚你是在遗留文件系统还是NTFS上,但是有一些东西可能会破坏文件系统位 - Vista引入了符号链接,这与常规快捷方式不同,因为它们解析了“客户端” “它们本身可能不算作文件系统对象。与目录重新分析点类似。 SFGAO枚举并不完全是对NTFS中发生的事情的1:1表示,因此请将其信息与盐分相提并论。

还有一个外部机会,坏块可能导致Windows报告文件系统位不一致。如果相同的文件有时被报告为文件系统对象,有时不会报告,那么这就成了你唯一的解释。

答案 1 :(得分:0)

你是递归地做这件事吗?

如果您进入存档(例如zip或cab文件),您将看到非文件系统对象。

同样,如果你进入一个带有desktop.ini文件的目录,你可能会看到非文件系统对象(但它取决于desktop.ini所引用的COM对象的作用)。

虽然在这两种情况下,如果您尝试将对象作为文件访问,您可能会看到未找到错误而不是访问被拒绝。您是否有可能对违规对象没有文件系统权限?

符号链接和重新分析点等NTFS功能被报告为文件系统对象,所以它们肯定不是问题。