为什么一般文件夹下的文件不允许重名,而回收站里的允许?

当一个文件被删除之后,Windows 将会自动将其重命名之后再放到一个自己维护的一个文件夹结构里去(即X:$Recycle.Bin),如下图:

回收站的实际文件结构

因此,在 Windows Explorer 下看起来是同名的文件,在回收站的文件系统中实际存储的文件名不重复。

那么,这些像是乱码的文件名到底是什么意思呢?Windows 是怎么通过这些文件名还原出这些文件原来的名字,路径的呢?

举一个文件作为例子:

C:\$Recycle.Bin\S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-1001\$RGL5JR1.exe
C:\$Recycle.Bin\S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-1001\$IGL5JR1.exe

其中 C:$Recycle.Bin\ 即为回收站的路径,每个盘都有一个回收站。

文件夹"S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-1001"是 SID,Windows 系统中用来辩识一个实体的辩识符,比如一个用户或是一个组。这样做的原因是为了进行权限控制,来避免一个普通用户(非管理员)可以查看、读取或删除其它用户的回收站文件。

再来看文件名,可能你也发现了,说是一个文件,实际上在回收站中每删除一个文件都会产生两个文件,这两个文件具有相同的后缀和ID,唯一的区别是它们的前缀不同——一个是 “$I” 开头而另一个是 “$R” 开头。$R 开头的文件中存储着文件的实际内容,而$I 前缀的文件存储着这个文件在被你丢进回收站之前的文件名,路径,时间等信息。尽管没有办法证实,但是你可以猜测R代表 Recycled,而 I 代表 Information。

“$I” 开头这个文件是用二进制存储的,用 hexdump 输出文件内容如下:

$ hexdump -e '16/1 "%02X " "  |  "' -e '16/1 "%_p" "\n"' "\$IGL5JR1.exe"
02 00 00 00 00 00 00 00 88 13 16 00 00 00 00 00  |  ................
D0 A3 78 2A 9A D3 D3 01 27 00 00 00 43 00 3A 00  |  ..x*....'...C.:.
5C 00 55 00 73 00 65 00 72 00 73 00 5C 00 4E 00  |  \.U.s.e.r.s.\.N.
75 00 6C 00 6C 00 5C 00 44 00 6F 00 77 00 6E 00  |  u.l.l.\.D.o.w.n.
6C 00 6F 00 61 00 64 00 73 00 5C 00 53 00 74 00  |  l.o.a.d.s.\.S.t.
65 00 61 00 6D 00 53 00 65 00 74 00 75 00 70 00  |  e.a.m.S.e.t.u.p.
2E 00 65 00 78 00 65 00 00 00                    |  ..e.x.e...

其中,第一行的 88 13 16 00 00 00 00 00 即为被删除文件的大小,0x161388 转换为10进制即为1446792(单位Byte)或约1412.9 KB / 1.3 MB。

第二行保存的是被删除文件的删除日期 D0 A3 78 2A 9A D3 D3 01。0x1D3D39A2A78A3D0 转换为10进制是131681473214850000,这是自从1601年1月1日开始算的100纳秒的个数。利用系统自带的小工具我们可以将其转换成正常可读的时间:

D:\>w32tm.exe /ntte 131681473214850000
152409 02:42:01.4850000 - 18/4/14 10:42:01

剩下来的部分即为被删除文件的原来的路径:C:\Users\Null\Downloads\SteamSetup.exe

所以我们/操作系统就可以得知,这原来是个我 (用户Null) 在 18/4/14 10:42:01 删除的一个大小为1446792 Bytes 的位于 C:\Users\Null\Downloads\ 文件名为 SteamSetup.exe 的文件。

打开回收站验证 参考文章:https://pdfs.semanticscholar.org/db62/a02a2f90c569200bf37ead369221e04393d8.pdf

(其实我几乎就是翻译+验证了一下这个文章)

此文章是搬运我在知乎上的回答:https://www.zhihu.com/question/272210371/answer/367326483