AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1751061
Accepted
inyourface3445
inyourface3445
Asked: 2022-11-05 04:51:55 +0800 CST2022-11-05 04:51:55 +0800 CST 2022-11-05 04:51:55 +0800 CST

为什么“<”和“>”字符似乎损坏了 Windows 文件夹?

  • 772

我在看FlyTech 的视频,当他制作了一对非法文件夹(一个名为“<”,另一个名为“>”)时,它让 Windows 认为包含它们的文件夹已损坏。对于具有非法字符的任何其他文件夹,似乎都不会出现此行为。

我想知道为什么这种特定的组合会让 Windows 认为包含的文件夹已损坏。我搜索了一下,找不到为什么会这样。谁能解释一下?

ntfs
  • 3 3 个回答
  • 4270 Views

3 个回答

  • Voted
  1. Best Answer
    user1686
    2022-11-05T06:01:10+08:002022-11-05T06:01:10+08:00

    该错误不是完全由尖括号引起的,也不是由两个尖括号引起的 - 相反,它发生在 1) 文件名在其名称中包含通配符,以及 2) 通配符与以前看到的文件匹配,这会导致 Windows认为文件夹搜索不会像应有的那样向前推进。

    首先,据我了解,在 Windows 上列出目录是通过通配符扩展完成的(与在 Linux 上完成的方式相反)。要扩展通配符模式,首先使用初始模式调用 FindFirstFile(),然后在 NTFS 逐个查找匹配文件时重复 FindNextFile()。要列出整个目录,您可以执行与*模式相同的操作。

    其次,在 Windows 文件处理代码的更深层部分,<和>(以及")实际上都被视为通配符——它们的行为类似于历史上的MS-DOS 通配符变体*和?。(例如,>又名 DOS_STAR 匹配文件扩展名之前的所有字符。)公开可用的.NET 源代码包含对该算法的描述,该描述与在泄露的 Windows NT 内核源中找到的相同。

    因此,它不仅是尖括号,而且还" ? *可以用来触发这个错误——只要它们与另一个在通配符之前排序的文件名结合使用,如果排序是通过 Unicode 值完成的(其中是 NTFS 强制执行的命令)。

    例如,如果您有名为foo(and的项目,您也会收到“文件夹损坏”错误foo*。这里没有什么特别之处(,除了它*在 Unicode 中出现在前面——而在后面排序的字符*不会foo+触发错误。(如果您想查看这些字符的 Unicode 位置,可以通过charmap.exe 打开“字符映射”。)

    同样,包含 [ foo<, foo=] 或 [ foo?, fooo] 的目录不会触发这种情况,但包含 [ foo=, foo>] 或 [ foo+, foo?] 的目录会。

    因此,如果我正确理解所有内容,似乎会发生以下情况:

    1. 该目录包含项目 [ foo(, foo*],NTFS 强制执行此确切顺序。
    2. 内核向 NTFS 询问“获取第一项,从*”开始。
    3. NTFS 查找并返回foo(.
    4. 内核向 NTFS 询问“获取下一项,继续foo(”。
    5. NTFS 找到foo((完全匹配)并返回下一项foo*。
    6. 内核向 NTFS 询问“获取下一项,继续foo*”。
    7. NTFS 找到foo*- 它被识别为通配符并foo(首先匹配,因此下一项foo*再次出现 - 因此引发错误。

    与通配符>的处理方式类似*,名为“ >”的文件夹通过匹配其<自身之前的前一个“ ”项会导致相同的问题。

    • 44
  2. metablaster
    2022-11-05T05:07:57+08:002022-11-05T05:07:57+08:00

    字符属于“保留字符”组<,>在 Windows 中不得用于命名文件或目录。

    https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file

    The following reserved characters are not valid to name a file or directory:
    
    < (less than)
    > (greater than)
    : (colon)
    " (double quote)
    / (forward slash)
    \ (backslash)
    | (vertical bar or pipe)
    ? (question mark)
    * (asterisk)
    
    • 3
  3. manassehkatz-Moving 2 Codidact
    2022-11-07T07:19:48+08:002022-11-07T07:19:48+08:00

    如另一个答案所述,这些字符位于保留字符组中:

    https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file

    The following reserved characters are not valid to name a file or directory:
    
    < (less than)
    > (greater than)
    : (colon)
    " (double quote)
    / (forward slash)
    \ (backslash)
    | (vertical bar or pipe)
    ? (question mark)
    * (asterisk)
    

    每一个都有非常具体的原因。有很多方法可以绕过它们,但每种方法在命令处理中都有一个基本功能:

    • < (小于) - 从文件输入
    • > (大于) - 输出到文件
    • :(冒号)- 驱动器标识符(例如C:)
    • " (双引号) - 引用包含空格的文件名
    • /(正斜杠)- POSIX 文件夹/目录分隔符
    • \(反斜杠) - Windows 文件夹/目录分隔符
    • | (垂直条或管道)- 使用一个进程的输出作为另一个进程的输入
    • ? (问号) - 单字符通配符
    • *(星号)- 多字符通配符
    • 1

相关问题

  • 确切文件(复制)在同一驱动器的磁盘上有不同的大小?

  • 如何通过 Powershell 基于组成员身份管理 NTFS 条件访问 (DAC)?

  • 你能启动 NTFS 闪存驱动器吗?

  • 如何创建脚本来监听内容变化并一直接触父文件夹?

  • 无法创建文件名中带有“:”的新文件,但我已经有 13300 个可以正常工作(linux、ntfs 分区)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve