如何解码 $Recycle.Bin 中的文件名

sim*_*ack 5 windows recycle-bin

当我列出文件$Recycle.Bin夹中的文件时,已删除文件的文件名如下所示:

\n\n
\n

C:\\$Recycle.Bin\\S-1-5-21-3704213190-1981809790-211521205-1000\\.\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd000200000008af358fa920f8faa779cf

\n
\n\n

Windows 如何将这些映射到原始文件的名称和路径?

\n\n

我用谷歌搜索了这个,但没有找到答案,不知道要搜索什么。

\n

小智 1

这些文件 (.\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd....\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd...) 实际上并不是由 Windows 在回收站的正常操作期间放置在那里的(回收站会生成 HelpingHand 的答案中提到的 $I 和 $R 文件)。

\n

当文件无法删除时(例如,因为文件正在使用中,但在 POSIX 语义下可以删除),它们分别由 Cygwin 和 MSYS2 放置在那里。

\n

由于某种原因,无效字符被cygmsys置到 Unicode 低代理区域,以产生无效的 UTF-16 文件名

\n

可能是无效的 UTF-16 对用户隐藏它们,但大多数情况下它只会破坏工具,因为许多跨平台工具和语言在与无效 UTF-16 文件名交互时存在问题,因为它们希望能够使用 UTF-8 来管理文件名内部。

\n

从在 Windows 10 1809 或更高版本上运行的 Cygwin 3 开始,我知道您唯一会看到此行为是当 msys/cygwin 可执行文件尝试删除正在运行的可执行文件(例如其本身)时;除了这种情况之外,Windows 现在实现了足够的 POSIX 语义来删除,例如,打开的文档,正如 Cygwin 所期望的那样。

\n

据推测,Cygwin/MSYS2 依赖于 Windows 在清空回收站时删除所有文件,因为它们似乎没有任何东西可以自动清理文件本身,并且文件名与 Windows 使用的文件名不匹配您可以使用 Windows API 删除内容。

\n

因此,为了回答您的问题,Windows 无法将它们映射回原始路径,因为它没有将它们放在那里。文件名仅包含原始路径的索引节点号和哈希值,因此也没有保留足够的信息来手动进行映射。

\n