picture 0

起因

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

解决

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

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

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

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

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

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

至此,问题解决

结束?

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

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

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

imaged46a6535.png

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

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

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

注意

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