2009-10-07 68 views
4

如果你想要做的事。你们用System.IO.Directory,但如果你想显示用于浏览一个使用FolderBrowserDialog对话框的目录/文件夹?为什么.NET在调用目录“目录”和“文件夹”中不一致?

为什么一个名为Directory和另一个文件夹?

+0

什么是名字? – NinethSense 2009-10-07 08:57:50

+1

“我们称之为玫瑰的任何其他名字都会闻到甜味”(莎士比亚),或者更恰当地说:“我们称之为任何其他名字的目录也会起作用” – RCIX 2009-10-07 09:13:11

+0

可能是因为“目录”是低级别的文件系统名称和“文件夹”是它在UI中称为什么?只是在这里猜测。 – 2009-10-07 09:21:57

回答

2

实际上,目录和文件夹之间存在差异,并且这两个术语在此处都正确使用。

目录是一个文件系统概念。 System.IO.Directory类以及System.IO命名空间中的大多数类仅处理文件系统,即。文件,目录和驱动器。这些有时被统称为(以编程方式或仅在语法上)作为文件系统对象或FSO。

另一方面,文件夹是操作系统的概念。更具体地说,这是一个Windows shell概念。这是一个比目录更高层次的概念。 Windows外壳通常不直接处理文件系统对象。相反,所有东西都抽象为命名空间对象。有两种类型的命名空间的对象:文件夹,这是其他命名空间对象的容器,和文件,哪些不是。 (请注意,名称空间中的“文件”不一定与磁盘上的文件相关联,可能是虚拟对象,如打印机)。

大多数名称空间对象代表文件系统对象,但不是全部做。例如,桌面文件夹是放置所有文件系统对象的%USERPROFILE%\Desktop%一个虚拟文件夹,以及在%ALLUSERSPROFILE%\Desktop文件系统对象,和一些非文件系统对象如回收站,我的电脑等

与Windows资源管理器一样,FolderBrowserDialog(与Benny几乎提到的一样,称为SHBrowseForFolder())提供了文件夹摘要视图,而不是文件系统驱动器和目录的直接视图。

还应该注意的是,System.IO.Directory类是ECMA规范基类库(BCL)的一部分,它旨在与平台无关。目录几乎存在于每个平台上。 System.Windows.Forms.FolderBrowserDialog类不是BCL的一部分。它位于特定于Windows的.NET框架中,因此其设计人员可以自由使用Windows概念,例如文件夹。


在另一方面,在.NET框架实际上并不支持命名空间的对象。尽管SHBrowseForFolder()函数可以返回任何名称空间文件夹,但FolderBrowserDialog使用BIF_RETURNONLYFSDIRS标志将返回限制为仅表示文件系统目录的文件夹。您不能使用FolderBrowserDialog来允许用户选择打印机文件夹或控制面板文件夹。尽管如此,即使它只会检索到目录的路径,它也会按文件夹浏览

大部分现代浏览器文件夹借用的的比喻,代表目录与​​图形文件夹图标,但文件夹的抽象的概念,这里所提出,是Windows的概念,跨不存在普遍平台。

14

可能是因为编写System.IO命名空间的团队与编写System.Windows.Forms的团队不同。

4

也许是因为文件夹在这种情况下是相当的Windows(不仅是?)不是文件系统对象的定义用户界面的一个术语。

0

也许一个是由一个Mac小伙子写的,另一个是由一个PC小伙子写的。

1

也许是因为的FolderBrowserDialog是从Win32平台SDK ShellBrowseForFolder()

3

在良好的醇” DOS的天,移植功能早在20世纪80年代,当DOS 2.0来了,并介绍了将文件放入更多的概念比您的160K软盘或10MB硬盘上的一个地方,Microsoft将这些“目录”或“子目录”称为原始shell命令以列出所述文件。

当第一个Windows 1.0的UI来了数年后,说的目录是由在MS-DOS执行文件夹图标,这是Windows资源管理器最初称为(或多或少)表示。

因此,“文件夹”是为更多的技术探测“目录”用户友好的隐喻。

+0

Commodore Amiga上有一个类似的隐喻,尽管他们选择了“抽屉”而不是“文件夹”。 – 2009-10-07 13:38:08

+0

最重要的是,微软试图增加公文包的概念来保​​存许多文件夹,但是这个概念在公众面前失败了。 +1供历史参考 – 2009-10-07 13:43:26

相关问题