2016-09-20 23 views
1

C:是我的PC的啓動驅動器。在根驅動器上調用GetParent()

DirectoryInfo dirInfo; 
dirInfo = System.IO.Directory.GetParent(@"C:"); // Case 1 
dirInfo = System.IO.Directory.GetParent(@"C:\"); // Case 2 

案例1:

dirInfo不是null,dirInfo.FullPath設置爲 「C:\ Program Files文件(x86)的\微軟的Visual Studio 14.0 \ Common7」 我的機器上

案例2:

dirInfo是空

Directory.GetParent Method

空如果路徑是根目錄

「C:」 不被視爲根。爲什麼不?

+0

因爲它根本不是文件夾?雖然我希望這個 –

+0

有個例外,但自從MS-DOS的日子以來,'cd C:'意味着將目錄更改爲C:驅動器上的當前目錄。 –

+0

對於DOS,也許。對於期望路徑或卷的命令,這是真的。 'GetParent'雖然需要一個路徑並返回一個絕對路徑。 'C:'不是一個有效的路徑根路徑,所以它被當作相對路徑,就像'Directory.GetParent(「c」)''或'Directory.GetParent(「a」)'一樣。對於所有這些情況,父目錄是當前目錄 –

回答

2

Directory.GetParent只是一個字符串處理函數,它接受絕對或相對的本地路徑或UNC並返回絕對字符串。如果路徑是相對的,則使用當前的工作目錄。正如文檔中所解釋的:

此方法返回的字符串由最後一個DirectorySeparatorChar或AltDirectorySeparatorChar之前的路徑中的所有字符組成。

這意味着如果您通過c\,該方法將返回C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\c

C:是一封卷信,而不是一個路徑。由於C:未被識別爲絕對路徑或UNC路徑,因此將其視爲相對路徑,就像c,anosuchfolder一樣。在這兩種情況下,返回值都將是當前的工作目錄。使用Visual Studio進行調試時,工作目錄是Visual Studio的目錄。