日期:2014-05-17  浏览次数:21036 次

如何禁止局部范围内文件名出现重名现象?
本帖最后由 mjh314159 于 2012-11-26 13:26:25 编辑
    从 DOS 时代,一直到现在的 Windows 7 、 Windows 2008 R2 ,在同一个文件夹内,相同后缀名的文件,系统禁止重名文件出现;在不同的文件夹内,相同后缀名的文件,系统是允许重名文件出现的。

    现在,有一个问题,我需要在某几个文件夹,其相互之间,以及文件夹与其子文件夹之间,在这整个“局部范围”之内,相同后缀名的文件,均不可以出现重名现象。

    比如说,我要把 F 盘作为工作数据保存盘来使用。F 盘上有“文件夹1”、“文件夹2”、“文件夹3”、“文件夹4”、…… ,其中每个文件夹内,又有很多子文件夹,子文件夹内还有子文件夹。

    现在,我需要凡是保存到“文件夹1”(含子文件夹)和“文件夹2”(含子文件夹)内的所有文件,只要是文件的后缀名相同的文件,在这整个的“局部范围内”,即“文件夹1”(含子文件夹)和“文件夹2”(含子文件夹)相互之间,均不可以出现文件重名现象。

    请问如何才能实现此要求?

    请大家不吝赐教,谢谢!

    

------解决方案--------------------
发现重名之后如何解决冲突?提示?自动重命名?删除?or...
最简单的实现,就是bat每隔一秒dir /a/b/s来对比结果。
另外也可以用vbs的fso来遍历目录,不过对于隐藏文件,可能会比较无解。
更高级一点,可以用vbs的wmi中的SELECT * FROM __InstanceModificationEvent WITHIN 1 WHERE TargetInstance ISA 'CIM_DataFile' 来监控文件的创建,然后再对其进行处理,缺点就是敏感度貌似不是很高,如果短期内有大量的文件操作,可以100%肯定会漏。
所以建议最终可以用fso来每隔一秒轮循遍历目录,并建表记录,发现重命则处理,另外通过WMI的异步实现监视文件的创建,在其中对比文件名并处理。