我正在编写一个程序来列出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 :(得分:8)
“”。是当前目录。
“..”是父目录。
这与Unix系统相同。从您的输出看起来,Windows将它们视为文件。
过去我用过“。”确保命令(它可能是什么)在当前目录中找到该文件。以下两个陈述应该相同:
run some.exe
run ./some.exe
但如果您有一些奇怪的搜索规则,它们首先在PATH或C:\ Windows中查找(例如),那么它们就不是。
我发现了这些陈述:
在Naming Files, Paths, and Namespaces的MSDN页面上
- 使用句点作为路径中的目录组件来表示当前目录,例如“。\ temp.txt”。有关更多信息,请参阅路径。
- 使用两个连续句点(..)作为路径中的目录组件来表示当前目录的父目录,例如“.. \ temp.txt”。有关更多信息,请参阅路径。
,但没有解释它们实际上是什么。
Wikipedia page on Path作为更多信息,但同样没有解释这些信息是如何实际存储的。
答案 1 :(得分:1)
单点代表当前工作目录。 双点表示当前工作目录的父目录。
这些都不代表底层文件系统中的具体“文件”,而是表示目录在文件系统层次结构中的位置。虽然你没有提到它,但'/'符号本身与它们类似,因为它通常代表特定文件系统的根。即
cd /
将带您到当前文件系统的根目录。
相反,'。'和'..'是对文件系统中可用资源的引用,因此是由文件信息请求生成的伪文件或伪引用到基础文件系统,并包括在内以帮助在文件系统周围导航。它们通常是OS独立的,即。大多数操作系统都尊重它们的使用。你说你在'写一个程序'。许多检索目录列表的文件管理例程包括在生成目录列表时忽略这些伪文件的开关或方法。
但是,通常最容易编写程序来迭代条目并忽略这些目录条目(如果您不需要它们)。或者,将程序编写为仅列出文件,甚至是您要查找的特定类型的文件。例如,在Windows中使用DOS类型命令,执行
dir /a:-d
将仅显示目录中的文件,但不会显示“。”和'..'条目。 而
dir *.txt
将仅列出目录中的.txt文件。
答案 2 :(得分:0)
如上所述'。'代表当前目录。虽然'..'代表父目录。 Windows将它们表示为链接。
顺便提一下,如果你在根目录中,那么windows(cmd提示模式)会考虑'。'和'..'一样。
当然,在Windows资源管理器中,以下情况并不好。如果你去C:\的父目录,那么你到达我的电脑。