2011-02-19 35 views
4

我正在編寫一個程序,列出Windows上目錄中的所有文件。我簡單地使用所提供的文件管理功能,但我很好奇的結果:「」什麼是「。」和「Windows」目錄中的「..」?

Target file is *.* 
The first file found is . 
The next file found is .. 
The next file found is file0 
The next file found is file1 
... 
... 
The next file found is fileN 

所以從技術上講,這些是什麼和「..」?我記得我在cmd中使用「cd ..」來退出到上層目錄。對於「cd。」,我不知道它是什麼。

+0

「。」代表當前目錄你在哪裏與Windows資源管理器/總指揮官或其他文件管理器,其中「..」表示命令上升1級到上層目錄,如你所說。 – psulek

回答

8

「。」是當前目錄。

「..」是父目錄。

這與Unix系統相同。從你的輸出看來,Windows將它們視爲文件。

以前我用過「。」以確保該命令(它可能是什麼)在當前目錄中找到該文件。下面的兩個語句應該是相同的:

run some.exe 

run ./some.exe 

,但如果你有一些奇怪的搜索規則,看起來在PATH或C:\ Windows首先(例如),那麼他們都沒有。

我發現這些語句:

  • 使用期限爲目錄組件的路徑來代表當前目錄,例如「\ TEMP.TXT。」有關更多信息,請參閱路徑。
  • 使用兩個連續的句點(..)作爲路徑中的目錄組件,以表示當前目錄的父級,例如「.. \ temp.txt」。有關更多信息,請參閱路徑。

Naming Files, Paths, and Namespaces的MSDN頁面上,但有沒有什麼他們實際上是解釋。

Wikipedia page on Path作爲一個更多的信息,但再次沒有解釋如何實際存儲這些。

+0

所以簡單地說,它就像一個指向目錄的指針,但它存儲在一個特殊類型的文件中?否則爲什麼它必須顯示在文件列表中? – Karl

+1

@Karl - 看起來這樣。我試圖找到一個可以給出明確答案的參考資料,但正如您可以想象的在Google搜索「cd」一樣。沒有讓我走得很遠。 – ChrisF

+1

Windows不會將它們視爲文件。 'FindFirstFile' /'FindNextFile'將枚舉它們,但如果你問他們的屬性,你會發現它們是目錄。 –

1

單點代表當前工作目錄。 雙點表示當前工作目錄的父目錄。

這些代碼都不代表底層文件系統中的具體'文件',而是代表目錄在文件系統層次結構中的位置。雖然你沒有提到它,但'/'符號本身與這些符號相似,因爲它通常代表特定文件系統的根。即

cd/

將帶您到當前文件系統的根目錄。

相反,'。'和'..'是對文件系統內可用資源的引用,因此是文件信息對底層文件系統的請求所生成的僞文件或僞引用,並且包含這些文件以幫助圍繞文件系統導航。它們通常與操作系統無關,即。大多數操作系統都尊重其使用。

你說你在寫'程序'。許多檢索目錄列表的文件管理例程包括一個開關或一種在生成目錄列表時忽略這些僞文件的方法。

但是,如果不需要它們,通常最容易編寫程序來迭代條目並忽略這些目錄條目。另外編寫你的程序只列出文件,甚至你正在尋找的特定類型的文件。例如,在Windows中使用DOS類型命令,執行

dir /a:-d 

將只顯示目錄中的文件,但不會顯示'。'和'..'條目。 而

dir *.txt 

只會列出目錄中的.txt文件。

0

如上所述'。'代表當前目錄。而'..'代表父目錄。 Windows將它們表示爲鏈接。順便說一句,如果你在一個根目錄中,然後Windows(cmd提示模式)認爲'。'和'..'是一樣的。

當然在Windows資源管理器中以下不要保持良好。如果你轉到C:\的父目錄,那麼你到達我的電腦。