代码之家  ›  专栏  ›  技术社区  ›  jasonh

快速确定C中的一组文件是否相同。

  •  1
  • jasonh  · 技术社区  · 15 年前

    我需要相对快速地确定用户机器上的一组文件以前是否已经被我的应用程序处理过。有问题的应用程序将用户的文件上传到服务器,如果以前上传过这些文件,它将跳过上传。到目前为止,我的计划是散列这些文件,然后将结果以及如何将它们上载到服务器的标识符存储起来。我想我会遇到的问题是,由于散列的长度,存储这些数据可能会变得相当麻烦。我现在预计会有30-40份文件,但这可能会翻一番,甚至是三倍。

    是否可以使用字典存储,其中哈希值为键,服务器信息为值?然后我将把字典存储在应用程序的properties.settings.default对象中。用这个系统存储是可行的还是会遇到某种问题?请注意,由于应用程序的性质,有 两个用户拥有相同数据集的机会,因此我不需要比较用户之间的上载。此外,这种类型的操作的性能如何?预计用户将至少拥有一个Pentium-M 1.5GHz处理器和1GB的RAM。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Jon Skeet    15 年前

    我可能不会把字典放到app.config文件中,不过我想你可以,这取决于服务器信息。我可能会自己把它放在一个文本文件中,除非你因为某种原因发现这是一个更大的问题。感觉像是更多的数据 对于 应用程序而非配置 属于 应用程序。

    性能根本不应该是一个问题-字典的设计目的是为了在 数以百万计的 条目的数量,更不用说你所说的几十条或数百条了。

        2
  •  1
  •   hugoware    15 年前

    关于获取散列值,我想我会提到这个…

    使用散列值是很好的,只要每次都能得到相同的结果。我在某个地方读到了.getHashCode()在不同版本的.NET中是不同的,因此如果您计划在持久状态下保存哈希,我将避免使用.getHashCode()。如果一次完成所有操作,那么.getHashCode()对于比较是否相同非常理想。

    如果需要持久化散列,则.NET中有散列类。诚然,我不是这方面的专家,但我认为sha1有一个散列方法。

        3
  •  0
  •   Vivek    15 年前

    为什么不比较文件修改日期时间呢?为此,您需要在服务器上保存修改日期。