Windows 系统中目录 (Directory) 与文件夹 (Folder) 的区别

在 Windows 系统中,我们经常会见到「目录」和「文件夹」两个名词,但很多人会这两个概念混用,甚至搞不清楚它们的区别,包括写这篇博文的我,之前也是一样。同样表示「文件夹」的概念,为什么会有两个说法?事实上,这两个词不仅仅是在中文中,在英文原文中,也是有两个不同的词汇,Directory 和 Folder。通常, Directory 被翻译成「目录」,而 Folder 被翻译成「文件夹」。但实际的情况是,很多情况下,这两个的翻译都比较混乱,Directory 也经常被翻译为「文件夹」。那么微软使用 Directory 和 Folder 这两个名词到底什么不同的意义和差异呢?这个问题我多年也没搞清楚,直到最近又在网上搜索资料,并自己进行一些测试后,才发现他们的细微差别。


首先,作为一个 Windows 开发人员,注册表、文件关联等都应该是了解的。那么大家应该都知道,在 Windows 的注册表编辑器中的 HKEY_CLASSES_ROOT 节点下面,有 Directory 和 Folder 两个子键,类似其他的 ProgId 子键,支持在其 shell 子键添加自定义的动作和命令。有一天我突发奇想,如果我分别在这两个位置添加一个动作项,系统该如何显示它们?


仅在 HKEY_CLASSES_ROOTDirectoryshell 下面随便添加一个节点,如 action,我分别在「计算机」、「回收站」、「计算机」中的任意驱动器、普通文件夹上点击右键,只有普通的文件夹右键菜单出现了 action 这一菜单项。


仅在 HKEY_CLASSES_ROOTFoldershell 下面随便添加一个节点,如 action,我分别在「计算机」、「回收站」、「计算机」中的任意驱动器、普通文件夹上点击右键,所有这些项目右键菜单中均出现了 action 这一菜单项。


仅在 HKEY_CLASSES_ROOTDriveshell 下面随便添加一个节点,如 action,我分别在「计算机」、「回收站」、「计算机」中的任意驱动器、普通文件夹上点击右键,只有驱动器盘符右键菜单中出现了 action 这一菜单项。


如此看来,Folder 的概念其实是很大的,它包括了系统中所有的概念上可以称之为「文件夹」的项目,包括「计算机」、「回收站」、「网络」等等这些虚拟文件夹,以及「计算机」中的所有磁盘驱动器以及其中的任何文件夹,均视作 Folder。


而 Directory 的概念则小的很多,它必须是存在物理于物理磁盘上的一个「文件夹」项目,而「计算机」中的所有磁盘驱动器则不认为是 Directory。


总结:如果是开发外壳扩展 dll,最好根据需要写入到正确的子键下面,不要在 Directory 和 Folder 等子键下乱写一通。虽然有的外壳扩展不支持虚拟文件夹,写在 Directory 下面系统也并不会加载,但还是希望各位开发人员能够遵守规范。