Dir*_*oer 196 windows filesystems
文件夹名称列在文件资源管理器中,只有简单的四个点....。
当我尝试打开它时,我进入了某种无休止的兔子洞循环,在那里我一次又一次地打开完全相同的文件夹 - 我可以无休止地这样做。显示路径,如C:\ExamplePath\....\....\....\....\....等。
它将我的 TypeScript 编译挂在一个特定项目中。我花了一年多的时间才发现这个文件夹及其相关问题,因为它深深植根于嵌套文件夹中。我从没想过会出现这样的问题,所以我从未寻找过它。
由于名称特殊,我无法以正常方式删除文件夹。最后,我可以通过使用命令行并删除带有rd /s /q path.
之后,我尝试再次创建该文件夹,但无法使用文件资源管理器和命令行执行此操作。
在我使用 Windows 的 20 多年中,我以前从未见过这个错误,所以我可以想象这对于业余用户来说真的是一个令人讨厌和困惑的问题。
有谁知道这是怎么发生的以及如何重现这个问题?
更新
对于感兴趣的人:此路径位于 TFS 文件夹的深处。所以 TFS 可能使用了 @grawity 解释的绕过方法(“各种文件管理器、存档器等”)
我是不是偶然发现了一个罕见的 TFS 错误?
use*_*686 303
Win32 不允许您创建名称以 结尾的文件或文件夹.——所有的点都从末尾去掉。尝试创建test.使test出现。(这是为了兼容旧的 DOS/Win9x 时代软件中的 8.3 名称。)
因此,每当您尝试访问名为 的文件夹时....,其名称都会缩减为空字符串,并且您将返回到之前所在的文件夹。
但是,NT 内核确实允许使用这样的名称。有多种机制可以绕过 Win32 API 强加的文件名限制——例如,WSL(用于 Linux 的 Windows 子系统)不在 Win32 之上运行并且不受其影响。还有\\?\绕过方法,这是一个故意为知道自己在做什么的程序留下的“后门”。即使你不能创造C:\Example\....\,你也可以创造\\?\C:\Example\....\得很好。
同样,您可以使用rmdir \\?\C:\path\...from Cmd删除此类目录(我还没有使用 PowerShell 进行过测试)。
各种文件管理器、存档器等可能会使用该\\?\方法,以便能够使用比平常更长的路径名——并且这样做,它们也不受 Win32 中的兼容性代码的影响;它们绕过点剥离,以及像CON或NUL.
所以它可能是你的程序之一:
\\?\用来访问文件,....- 但事后确实不可能确定。use*_*080 21
除了@grawity 的回答之外,Win32 程序也可以通过直接调用“本机”API 来做到这一点。如果我没记错的话,在本例中,就是 NtCreateDirectoryObject。这些调用现在已经得到了很好的记录,特别是它们的内核对应物(你不能从 Win32 程序调用),在这种情况下, ZwCreateDirectoryObject 。
关于“无尽的深度”,实现这一目标的一种简单方法是使用链接。创建一个目录,然后在其中创建一个到它的连接(mklink /j例如,您可以使用),您最终会得到一个非常深的结构。上次我在 Windows 2000 上这样做时,虽然递归结束了(你不能“无限挖掘”)。可能在较新的操作系统上,限制更大或被删除,您也可以创建假设 10 个目录,每个目录都是前一个目录的子目录,并在第 10 个目录中创建一个返回第一个目录的链接。
Lar*_*ryc 18
有一种更简单的方法来创建目录。从命令提示符键入:
MD ....\
然后按回车键,它会创建一个有四个点的目录。这个目录也可以用资源管理器查看。
MS-DOS 中有一个缺陷,它可以追溯到 1.0 版。MS 已经知道它有一段时间了,但不能或不会修复它。他们已经用 PowerShell 纠正了这个问题。
顺便说一句,如果您尝试:
RD ....
删除会失败。您需要使用此特定语法将其删除。
RD ....\
我在我管理的某些服务器上使用它。我经常在磁盘的根目录上创建一个用户文件夹,我不希望其他管理员出现并删除它。
所以我将进入我的文件夹并创建一个名为 CON、AUX 或 LPT 等的子文件夹...
如果另一个管理员想要删除我的文件夹,他们首先需要知道如何删除这个子文件夹。
编辑:今天早上我正在考虑这个讨论,我决定更进一步。我认为模组将决定这是否相关。
我无法将 CD 放入该文件夹。
考虑一下,如果我 MD c:\test 然后 CD C:\test 和 MD ....\ 我最终得到 C:\test....
一切都很好。
但是 CD .... 失败并将我踢回 C:\test。(CD ....\ 也是如此。)
但是我可以 DIR .... 并获得目录列表。我还可以
MD C:\test....\temp 并在 ....
我也可以 CD C:\test....\temp 并进入该子子目录。
但是在 C:\test....\temp 中,如果我 CD .. 我又回到了 C:\test。
我无法 cd 进入该目录,但我可以通过创建子文件夹来操作该文件夹,并且很有趣,例如
ECHO“测试”>> C:\test....\test.txt
也可以工作并在该文件夹中创建一个文件。所以我可以创建一个带有四个点的文件夹,我可以向其中添加文件和文件夹,我可以获得它的目录列表,但我无法将其 CD 放入其中。会不会有什么邪恶的天才用在这上面?如果我偏离路线太远,我向模组道歉。
| 归档时间: |
|
| 查看次数: |
37391 次 |
| 最近记录: |