虚拟&特殊文件夹工作?

时间:2014-03-06 19:59:01

标签: windows operating-system filesystems special-folders

Windows有几个“虚拟文件夹”和“特殊文件夹”(维基百科的名称),它们改变了文件系统的工作方式。例如,Desktop文件夹在某些情况下就像文件系统层次结构的根一样,即使C:/是整个文件系统所在的驱动器(也称为分区),因此逻辑上Desktop应位于C:/之下。屏幕截图:Picture of Desktop folder, with <code>This PC</code> circled Picture of <code>This PC</code>, showing that <code>C:/</code> isn't always the root of the filesystem还有Library个文件夹。此外,在您的计算机上使用msysGitCygwin,程序的文件夹就会神奇地成为文件系统的根目录。

我确定其他操作系统上有实例,但我只是真正使用Windows,尽管看起来Linux的抽象性要差得多。

应用程序如何做到这一点?它只是一个非常复杂的shell脚本,或只影响某些程序的东西(例如,维基百科说Desktop只是Windows Explorer中的根文件夹)?它是否类似于Linux上所有文件夹的“挂载”,甚至是根文件夹?即使操作系统开发人员通常不会泄露他们的秘密,如果可能的话,我仍然想知道基本方法。

1 个答案:

答案 0 :(得分:1)

所以,wikipedia's entry for special folder说:

  

Desktop虚拟文件夹是Windows Shell命名空间的根目录,   其中包含其他虚拟文件夹。

这与说“文件系统层次结构的根”不同。 Windows有一组虚拟文件夹。所有这些都嵌套在桌面下。

对于Win7及更高版本,默认的文件系统布局实际上是:

  • 桌面 - &gt; C:\ Users \(用户名)\ Desktop
  • 我的文档 - &gt; C:\ Users \用户(用户名)\文件
  • 下载 - &gt; C:\ Users \用户(用户名)\下载

这些别名对于资源管理器shell来说意味着什么,但不是在文件系统级别(打开cmd.exe,看看我的意思)。

在文件系统级别和应用程序中,文件系统路径才是最重要的。它需要额外的API调用(使用SHGetSpecialFolderPath())来确定特殊文件夹所在的文件系统的位置;应用程序只关心文件系统中需要定位的位置。

至于Cygwin,我强烈怀疑它正在做一些完全不同的事情。 Unix有一个特殊的调用chroot(),它确实修改了当前运行的shell的根目录。这意味着在该shell下运行的应用程序完全不知道chroot()'d路径下的目录结构,这通常是出于安全原因。实际上,这通常被称为chroot jail,因为它不是别名或虚拟目录,并且无法转义(除非内核中存在错误)。