2009-10-07 25 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

相關問題