记一次神奇的文件夹删除失败问题
起因
用node爬了一波壁纸图片,为了方便管理,我采用用户名作为文件夹名字对图片进行了分类。
没毛病吧~
然后其中有个用户名含有一个.
然后windows也是支持文件夹名字中带.
,也没毛病吧~
用node的fs创建文件夹成功,你看,就搁这资源管理器里呢~
双击打开,咦,怎么就打不开了呢?其他都能打开啊
算了,不管了,先删了吧。
????咋还不让删了啊!!
这可咋整!!!
解决
分析了下,出现问题的文件夹是以.
结尾的,这大概就是问题的根源。
出问题先搜索一下,毕竟世界这么大,高人这么多,是个坑就有人掉进去过。
首先找到的是用cmd删除,熟练地摁下win
+r
,敲入cmd
,再来个大大的回车,熟悉的黑窗口出现了,另一边熟练地打开浏览器,搜了下删除文件夹的命令,好的rd
,知道了,敲进去(我忘了怎么切盘符这件事你觉得我会说么?)rd test.
,再来一个大大的回车,完美~
咦,咋就找不到了呢,就搁这资源管理器呢,是不是瞎了啊?
没辙,只能换别的,文件粉碎机安排~专治疑难杂症
5,4,3,2,1,开始粉碎!!!
哦豁,在么完蛋,删不掉咯
最终,在知乎上找到了同病相怜的朋友,点这里查看
解铃还须系铃人,既然是node创建的文件夹,那就用node删除。不过node的版本必须是12以上,我最开始node版本是10,删除的时候直接报错,升级node版本后成功删除
1 | const fs = require('fs'); |
至此,问题解决
结束?
你以为这就结束了?并没有,搜索了一下这个神奇的问题,找到了一篇文章
当我们直接在资源管理器中创建以.
结尾的文件夹时,
得到的文件夹其实是不带.
的
而参考前面提到的文章,直接重命名的时候输入test.\
,系统会直接告诉你不能含有\
然而在cmd中,不会限制你输入\
,所以可以进行如下实验:
md test.
,得到test
文件夹md test.\
,依然得到test
文件夹md test..\
,得到test..
文件夹,并没有得到test.
md test...\
,得到test...
文件夹md test....\
,得到test....
文件夹
这里跟之前的文章有了一些出入,怀疑是系统版本的问题,做了一些处理,从截图上看,前辈用的是xp而我是win10。
最终没能得到test.
继续其他的,双击每个文件夹,都能打开,在test
文件夹下建了个文件,结果他出现在了每个文件夹下。
????也就是说这些文件夹最终都指向了test
?
删除任意带.
的文件夹
大概率是了。
而我们直接在地址栏输入G:\test\test....
,最终到达的地方也是G:\test\test
所以,win10过滤掉了文件夹最后所有的.
,对任何带.
的文件夹进行操作,都将被指向到不带.
的文件夹,包括重命名等操作。
所以这也解释了为什么我最开始test.
文件夹无法打开的问题,因为所有操作都被指向了test
,没有.
,然而目录下并没有这个文件夹,当然找不到了啦~
那么,带.
的文件夹和不带.
的是同一个文件夹么,没有深入研究,是,又或者不是,因为所有的操作都被指向了同一个文件夹,但是每个文件夹又有不同的属性,不好说~
注意
以上只是好奇心发作随便研究了一下,我不保证内容正确性,就当增加了一点没用的知识点吧~
所有截图是后期水文的时候模拟现场截的,与案发现场有一定的出入,仅供参考