在Windows目录中,"."和".."分别代表什么意思?

3
我正在编写一个程序,在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 .”,我不知道它是用来干什么的。


“.”代表当前目录,你可以在Windows资源管理器、Total Commander或其他文件管理器中使用它。而“..”则表示返回上一级目录的命令。 - psulek
3个回答

8

"."代表当前目录。

".."代表上级目录。

这与Unix系统相同。从你的输出来看,Windows将它们视为文件。

过去我使用"."确保命令(无论是什么)在当前目录中找到文件。以下两个语句应该是相同的:

run some.exe

run ./some.exe

但是,如果您有一些奇怪的搜索规则,在PATH或C:\Windows中首先查找(例如),那么它们就不是。

我找到了以下这些陈述:

  • 在路径中使用一个句点作为目录组件,表示当前目录,例如".\temp.txt"。有关更多信息,请参阅路径。
  • 使用两个连续的句点(..)作为目录组件,表示当前目录的父目录,例如".. \temp.txt"。有关更多信息,请参阅路径。

Naming Files, Paths, and Namespaces的MSDN页面上,但没有解释它们实际上是什么。

路径的Wikipedia页面提供了更多信息,但同样没有解释它们实际上是如何存储的。


简单地说,它就像一个指向目录的指针,但是它存储在一种特殊类型的文件中?否则为什么它必须显示在文件列表中? - Karl
1
@Karl - 看起来是这样。我正在尝试找到一个能给出明确答案的参考资料,但你可以想象用“cd .”在Google上搜索并没有帮助我多少。 - ChrisF
1
Windows不将它们视为文件。FindFirstFile/FindNextFile会枚举它们,但如果您要求它们的属性,您会发现它们是目录。 - David Heffernan
最终,这些东西只是文件系统命名空间中对象的名称。它们从来不是文件或目录,只是那些东西的名称。当然,一个单独的对象有无限数量的不同名称(使用“..”)! - David Heffernan

1

单个点表示当前工作目录。

双点表示当前工作目录的父目录。

这两者都不代表底层文件系统中的具体“文件”,而是代表文件系统层次结构中目录的位置。虽然您没有提到它,但“/”符号本身类似于这些符号,通常表示特定文件系统的根目录。即

cd /

将带您到当前文件系统的根目录。

而'.'和'..'是对文件系统中可用资源的引用,因此它们是由请求底层文件系统的文件信息而生成的伪文件或伪引用,并包含在文件系统周围导航中以帮助。它们通常是操作系统无关的,即大多数操作系统都尊重它们的使用。

您说您正在“编写程序”。许多检索目录列表的文件管理例程包括一个开关或一种方法,该开关或方法在生成目录列表时忽略这些伪文件。

然而,如果您不需要它们,最简单的方法通常是编写程序遍历所有项并忽略这些目录条目。或者,编写程序仅列出文件,甚至是您要查找的特定类型的文件。例如,在Windows中使用DOS类型命令执行

dir /a:-d

会显示目录中的文件,但不包括“.”和“..”条目。

同时

dir *.txt

只会列出目录中的 .txt 文件。


0

如上所述,'.'代表当前目录,而'..'代表父目录。Windows将它们表示为链接。

顺便提一下,如果您在根目录中,则Windows(cmd提示模式)将'.'和'..'视为相同。

当然,在Windows资源管理器中,以下内容不适用。如果您进入C:\的父目录,则会到达“我的电脑”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接