【技术分享】面对复杂的文件名冲突,我采用了这个方法轻松搞定!

【技术分享】面对复杂的文件名冲突,我采用了这个方法轻松搞定!

首页角色扮演代号以天之名更新时间:2024-06-04

有次我的同事问我,你能一次性把一个文件夹下所有的同名文件提取出来吗?

我想这有什么难的,就说“小意思!给我买杯咖啡就可以了,买完回来就好了”,没想到她接着说:

“可以,我平时文件备份好几份,反而乱了,我想重新整理到一个文件夹中,但有的可能修改了,我不知道该保存哪个文件,还要先复制到一起比较一下”。她用谦卑又狡猾的神色对我说。

“我去!”,本来想拿咖啡这个事搪塞过去,她平时老小气了,一杯10多元的咖啡肯定心疼的放弃。

这个事我我本不想管,写程序是很累的,费神费力不说,都知道,一旦你做了,后续出现任何一点BUG都要操心,不管她吧还不合适,说不定还会因此得罪同事。

想来想去,我还是帮一下吧,考虑到自己也这样,平时很少规划,导致电脑中的文件乱七八糟,自己也想有空整理一下。

开工!

第一步:实现查找提取同名文件。

这里还用C#实现:

// 查找源文件夹下的所有文件(包括子文件夹) var files = Directory.GetFiles(sourceFolderPath, "*", SearchOption.AllDirectories);

把“*”改成要查找的文件名就可以了。采用递归查找源文件夹中的所有文件(包括子文件夹中的文件)。

第二步:处理文件名冲突。

这个好麻烦,想了好几个方法,都不能完全达到要求。

首先是不能用原来的文件名的,复制到一个文件夹中肯定会发生冲突。

第二,不能用随机文件名,这样根本无法分辨来源于哪个文件夹。

第三,也无法用HASH、MD5等值表示,可能会冲突不说,还原也是问题。

第四,用BASE64转码,这个倒是可以互相转换,但还得编写转换代码,也不直观。那还有没有好办法呢?

最终,我想到一个可行的办法。因为每个文件原始是存在于不同文件夹的,我提取出完全的路径作为新文件名就可以了,这样还可以看新文件名找到来源文件夹,方便处理文件。

思路有了,怎么处理呢?首先,你的系统要支持长文件名,要不会出现“~”这样的字符,还是会出错。其次,路经中“\”是不能作为文件名的,这个需要处理。第三还要考虑到路径中可能会出现空格等,另外要考虑文件名不能超出最大长度,所以,要采取方法尽量减少文件名长度。

第三步:复制文件。这个就简单了,但还是要防止意外的情况,我就采用如果目标文件已存在,则覆盖它策略吧,并把出错的纪录下来,以供查错。

最终实现效果:

软件制作完成!这杯咖啡不容易!软件及代码我免费分享,需要的可留言给我。希望可以帮到更多的朋友!咖啡就不分享了,自己喝了!哈哈![可爱]

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved