对Vista“灰叉”图标的分析

2008/11/02 | 18:58 | 分类:Windows应用 | 标签: | 821次阅读

  前几天从某网站下载了一个zip压缩文件,在Windows Vista下使用7-zip解压之后,发现解开得到的部分文件图标左下角有一个灰色的叉子(就像快捷方式文件左下角有一个小箭头),但这些文件本身可以正常打开。不知叉子为何意,google之后也没有找到答案。我把这个zip文件复制给朋友测试,他们却没有发现相同的问题。于是自己研究:
  想到Windows的不少shell图标存在C:\Windows\system32\imageres.dll文件中,打开这个文件,果然发现了这个叉子。所以推断这是Windows的特性,而不是其它版本管理之类的软件加上去的图标。
  试验发现在NTFS分区下解压该zip文件后,生成的文件图标上存在这个叉子;但在FAT分区下解压后,图标上没有这个叉子。推测它与NTFS的某个特性有关。
  试验发现有叉子的文件复制、粘贴到另一个地方之后,新的文件图标上没有叉子;但在剪切、粘贴到另一个地方之后,新的文件图标上有叉子。对有叉子和没有叉子的文件算MD5,并对在FAT分区解压出来的文件也计算MD5,结果一致,所以推测叉子的问题出在NTFS文件头中,而不在数据区中。
  于是对比有叉子和没有叉子的文件的属性(右键——Properties——Details),果然发现了问题:有叉子的文件属性为AO,没有叉子的文件属性为A。我们知道A、R、S、H是文件系统常用的四种属性,分别代表archive、read-only、system、hidden,那么这个O又是什么意义呢?查阅了一下Wikipedia,得知NTFS文件还有3种特别的属性:N、O、T,分别代表not content indexed、off-line、temporary。原来有叉子的文件代表它具有off-line属性!google一下发现这种属性用于标识在远程或慢速设备上存储的文件是否已同步。实现中很少使用。
  也就是说,我下载的那个zip包的作者在打包时,某些文件可能处于未同步的状态。由此也得知,Windows在复制文件的时候,会忽略这个属性。但为什么朋友解压这个zip包之后没有看到叉子呢?原来他使用的是WinRAR解压,WinRAR也忽略这个属性;而我使用的7-Zip却忠实地保留了这个属性,使得叉子现身。
  在Windows XP下做相同的测试,发现XP使用一个黑底色的时钟图标表示off-line属性,它当然也是存在XP的imageres.dll文件中的。
  在兴趣的朋友可以用一些第三方工具给NTFS文件人为加上N、O、T等属性,研究一下它们的特别之处。

相关文章

发表您的评论

您的名字: (必填)

您的邮箱: (不会被公布,必填)

您的网站:

* 正确填写邮箱可支持Gravatar头像服务。
* 与主题无关的内容请用邮件或IM与我联系。