Language agnostic 检测文件是否重复,如果不重复则重命名

Language agnostic 检测文件是否重复,如果不重复则重命名,language-agnostic,file-handling,Language Agnostic,File Handling,我有一些将文件移动到同一目录的代码。以下哪种策略是好的: 检测文件是否与目录中现有文件重复?这是为了决定是删除源还是简单地保留它 如果已存在同名但内容不同的目标文件,是否重命名源文件 检测重复文件 大多数编程语言都有一个类似于FileExists的函数,它获取一个文件名并返回一个布尔值,指示文件系统中是否存在具有给定名称的文件 处理名称相同但内容不同的文件 计算两个文件的校验和并比较这些散列。同样,大多数语言都有一个sha1函数,它获取一个表示文件内容的字节数组,并返回一个表示sha1哈希的

我有一些将文件移动到同一目录的代码。以下哪种策略是好的:

  • 检测文件是否与目录中现有文件重复?这是为了决定是删除源还是简单地保留它
  • 如果已存在同名但内容不同的目标文件,是否重命名源文件
检测重复文件

大多数编程语言都有一个类似于
FileExists
的函数,它获取一个文件名并返回一个布尔值,指示文件系统中是否存在具有给定名称的文件

处理名称相同但内容不同的文件

计算两个文件的校验和并比较这些散列。同样,大多数语言都有一个sha1函数,它获取一个表示文件内容的字节数组,并返回一个表示sha1哈希的字节数组

检测重复文件

大多数编程语言都有一个类似于
FileExists
的函数,它获取一个文件名并返回一个布尔值,指示文件系统中是否存在具有给定名称的文件

处理名称相同但内容不同的文件


计算两个文件的校验和并比较这些散列。同样,大多数语言都有一个sha1函数,它获取一个表示文件内容的字节数组,并返回一个表示sha1哈希的字节数组。

好的,一个简单的方法是执行一个。有几种语言为此实现了函数。您还可以计算文件的md5总和。但这并不是100%可靠

如果需要检查它们是否相同,则需要打开两个文件的流,并逐字节比较它们

检查重复的文件名很明显,请比较它们


编辑:如果有许多文件,请比较文件大小。如果不匹配,它们就不可能相等。

好吧,一个简单的方法就是做一个测试。有几种语言为此实现了函数。您还可以计算文件的md5总和。但这并不是100%可靠

如果需要检查它们是否相同,则需要打开两个文件的流,并逐字节比较它们

检查重复的文件名很明显,请比较它们


编辑:如果有许多文件,请比较文件大小。如果不匹配,则它们不能相等。

如果您不需要原始文件名,作为一种简便的方法,只需计算文件“content”的MD5或SHA1哈希值,然后将文件重命名为它。:-)

如果不需要原始文件名,作为一种简便的方法,只需计算文件“content”的MD5或SHA1哈希值,然后将文件重命名为它。:-)

谢谢你,亚历克森。为什么CRC32和MD5不是100%可靠的?我目前正在使用md5检查文件是否已作为故障保护正确复制。我还想在添加文件时,有一个MD5列表可供检查。但是,如果存在大量文件,这种方法可能会变得效率低下。这可以通过使用减少比较次数的算法来解决。对于相同的文件名,我希望保留原始文件名的跟踪(可能在数据库中),然后用另一个名称复制它。它们可能会导致冲突。你处理的文件有多大?谢谢alexn。为什么CRC32和MD5不是100%可靠的?我目前正在使用md5检查文件是否已作为故障保护正确复制。我还想在添加文件时,有一个MD5列表可供检查。但是,如果存在大量文件,这种方法可能会变得效率低下。这可以通过使用减少比较次数的算法来解决。对于相同的文件名,我希望保留原始文件名的跟踪(可能在数据库中),然后用另一个名称复制它。它们可能会导致冲突。您处理的文件集有多大?我正在测试目标文件是否已经存在。我想做的是以下几点。如果目标文件存在并且相同,只需忽略源文件即可。如果目标文件存在但内容不同,请应用一致的重命名算法,并在XML或DB中保留原始文件名的跟踪。我正在测试目标文件是否已存在。我想做的是以下几点。如果目标文件存在并且相同,只需忽略源文件即可。如果目标文件存在但内容不同,请应用一致的重命名算法,并在XML或DB中保留原始文件名的跟踪。这不是一个坏主意。这会降低文件名的可读性,但会避免重复名称。另外,如果发生冲突,正如alexn所解释的,可以添加后缀。这不是一个坏主意。这会降低文件名的可读性,但会避免重复名称。此外,如果发生亚历克森解释的冲突,可以添加后缀。