记一次神奇的文件夹删除失败问题

本贴最后更新于 1394 天前,其中的信息可能已经事过境迁

5a7a6feae7bce72552e68c70.jpg

起因

用 node 爬了一波壁纸图片,为了方便管理,我采用用户名作为文件夹名字对图片进行了分类。
没毛病吧~
然后其中有个用户名含有一个 .
然后 windows 也是支持文件夹名字中带 .,也没毛病吧~
用 node 的 fs 创建文件夹成功,你看,就搁这资源管理器里呢~
image.png
双击打开,咦,怎么就打不开了呢?其他都能打开啊
image.png
算了,不管了,先删了吧。
image.png
????咋还不让删了啊!!
这可咋整!!!

解决

分析了下,出现问题的文件夹是以 . 结尾的,这大概就是问题的根源。
出问题先搜索一下,毕竟世界这么大,高人这么多,是个坑就有人掉进去过。

首先找到的是用 cmd 删除,熟练地摁下 win+r,敲入 cmd,再来个大大的回车,熟悉的黑窗口出现了,另一边熟练地打开浏览器,搜了下删除文件夹的命令,好的 rd,知道了,敲进去(我忘了怎么切盘符这件事你觉得我会说么?)rd test.,再来一个大大的回车,完美~
image.png
咦,咋就找不到了呢,就搁这资源管理器呢,是不是瞎了啊?

没辙,只能换别的,文件粉碎机安排~专治疑难杂症
image.png
5,4,3,2,1,开始粉碎!!!
image.png
哦豁,在么完蛋,删不掉咯

最终,在知乎上找到了同病相怜的朋友,点这里查看
image.png

解铃还须系铃人,既然是 node 创建的文件夹,那就用 node 删除。不过 node 的版本必须是 12 以上,我最开始 node 版本是 10,删除的时候直接报错,升级 node 版本后成功删除

const fs = require('fs');
fs.rmdirSync("test.", {recursive: true})

至此,问题解决

结束?

你以为这就结束了?并没有,搜索了一下这个神奇的问题,找到了一篇文章

当我们直接在资源管理器中创建以 . 结尾的文件夹时image.png
得到的文件夹其实是不带 .image.png
而参考前面提到的文章,直接重命名的时候输入 test.\,系统会直接告诉你不能含有 \ image.png
然而在 cmd 中,不会限制你输入 \,所以可以进行如下实验:

  1. md test.,得到 test 文件夹
  2. md test.\,依然得到 test 文件夹
  3. md test..\,得到 test.. 文件夹,并没有得到 test.
  4. md test...\,得到 test... 文件夹
  5. md test....\,得到 test.... 文件夹

image.png
这里跟之前的文章有了一些出入,怀疑是系统版本的问题,做了一些处理,从截图上看,前辈用的是 xp 而我是 win10。
最终没能得到 test.

继续其他的,双击每个文件夹,都能打开,在 test 文件夹下建了个文件,结果他出现在了每个文件夹下。
????也就是说这些文件夹最终都指向了 test?
删除任意带 . 的文件夹
image.png
大概率是了。
而我们直接在地址栏输入 G:\test\test....,最终到达的地方也是 G:\test\test
所以,win10 过滤掉了文件夹最后所有的 .,对任何带 . 的文件夹进行操作,都将被指向到不带 . 的文件夹,包括重命名等操作。
所以这也解释了为什么我最开始 test. 文件夹无法打开的问题,因为所有操作都被指向了 test,没有 .,然而目录下并没有这个文件夹,当然找不到了啦~

那么,带 . 的文件夹和不带 . 的是同一个文件夹么,没有深入研究,是,又或者不是,因为所有的操作都被指向了同一个文件夹,但是每个文件夹又有不同的属性,不好说~

注意

以上只是好奇心发作随便研究了一下,我不保证内容正确性,就当增加了一点没用的知识点吧~
所有截图是后期水文的时候模拟现场截的,与案发现场有一定的出入,仅供参考

  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    138 引用 • 268 回帖 • 201 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    215 引用 • 462 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...