iny*_*445 26 ntfs files-folders
我在观看FlyTech 的视频时,当他制作了一对非法文件夹(一个名为“<”,另一个名为“">”)时,Windows 认为包含它们的文件夹已损坏。对于任何其他包含非法字符的文件夹,似乎没有发生此行为。
我想知道为什么这个特定组合会让 Windows 认为包含的文件夹已损坏。我搜索了一下,但找不到原因。有人能解释一下吗?
use*_*686 46
该错误并不是由尖括号引起的,或者是由其中两个 \xe2\x80\x93 引起的,而是在以下情况下发生:1) 文件名在其名称中包含通配符,并且 2) 通配符与之前看到的通配符相匹配file,这会导致 Windows 认为文件夹搜索没有像应有的那样向前推进。
\n首先,据我了解,在 Windows 上列出目录是通过通配符扩展来完成的(与 Linux 上的方式相反)。要扩展通配符模式,首先使用初始模式调用 FindFirstFile(),然后在 NTFS 逐一查找匹配文件时重复 FindNextFile()。要列出整个目录,请执行与*
模式相同的操作。
其次,在 Windows 文件处理代码 \xe2\x80\x93 的深层部分中,<
和>
(以及)实际上都被视为通配符,它们的行为类似于历史上MS-DOS 通配符变体和。(例如,又名 DOS_STAR 匹配文件扩展名之前的所有字符。)公开可用的.NET 源代码包含该算法的描述,该描述与泄露的 Windows NT 内核源代码中的描述相同。"
*
?
>
因此,不仅仅是尖括号,而且只要它们与将在通配符之前"
?
*
排序的另一个文件名结合使用,也可以用来触发此错误 \xe2\x80\x93,如果排序是按 Unicode 值(这是 NTFS 强制执行的顺序)完成的。
例如,如果您有名为foo(
和 的项目,您还会收到“文件夹已损坏”错误foo*
。这里没有什么特别的(
,除了它*
在 Unicode \xe2\x80\x93 中排在前面,而排序在后面的字符*
(例如)foo+
不会触发错误。(如果您想查看这些字符的 Unicode 位置,可以通过 charmap.exe 打开“字符映射表”。)
foo<
同样,包含 [ , foo=
] 或 [ foo?
, ]的目录fooo
不会触发这种情况,但包含 [ foo=
, foo>
] 或 [ foo+
, foo?
] 的目录会触发这种情况。
因此,如果我正确理解一切,似乎会发生以下情况:
\nfoo(
, foo*
],NTFS 强制执行此确切顺序。*
。foo(
.foo(
”。foo(
(完全匹配)并返回下一项foo*
。foo*
”。foo*
\xe2\x80\x93 被识别为通配符并foo(
首先匹配,因此下一项foo*
又是 \xe2\x80\x93,因此会引发错误。与通配符>
的处理方式类似*
,名为“ ”的文件夹通过匹配其前面的前一个“ ”项目>
会导致相同的问题。<
归档时间: |
|
查看次数: |
4762 次 |
最近记录: |