【问题标题】:Compare local file and cloud file (using Dropbox with DropNet lib)比较本地文件和云文件(使用 Dropbox 和 DropNet lib)
【发布时间】:2014-05-12 01:53:40
【问题描述】:

在 C# 中,我正在使用 DropNet 库创建一个客户端来同步本地文件和 Dropbox 文件夹。
如果云和本地文件夹中都存在同一个文件,我如何检查它们是否相同,或者两者中哪一个更新? 如果我将云文件的 ModifiedDate 与本地文件的 LastWriteTime 进行比较,这些日期总是冲突的,可能是因为客户端时间与 Dropbox 的服务器时间不同。 如何进行有效的文件比较?

【问题讨论】:

  • 计算两个文件的哈希值(md5、sha1等)并进行比较。
  • Dropnet lib 允许我在不下载文件的情况下检查此控件?

标签: c# dropbox-api file-comparison dropnet


【解决方案1】:

逐字节比较可能是最正确的方法。阅读此链接以讨论文件哈希。

https://stackoverflow.com/a/7931320/1706610

这里有一个很好的链接,用于逐字节文件比较方法。

http://www.dotnetperls.com/file-equals

【讨论】:

  • 感谢您的回答,但是要比较的文件之一是在云空间中。我无法循环下载它们来进行(有效的本地)检查!所以我想知道,对于 Dropnet,这两个文件(本地文件和云端文件)中的哪一个是最新的
【解决方案2】:

Dropbox API 允许您与正常的 Dropbox 生态系统交互,当与 Dropbox 同步时,一个帐户上可能有超过 2 个客户端。为了协调这一点,Dropbox 服务器被认为是事实的来源。因此,当您与 Dropbox 同步时,您应该尽快从服务器获取所有更改,并将所有本地更改报告给服务器。

按照这些思路,虽然 Dropbox API 当前不提供获取远程文件的文件 ID 或哈希值的方法(尽管我们将此作为功能请求),但它确实提供了了解文件是否具有远程更改,以便您可以更新本地状态。通过 /metadata API 调用在特定路径使用文件的“rev”属性的一种方法:

https://www.dropbox.com/developers/core/docs#metadata

如果自上次检查后 rev 已更改,则该路径中的文件已更改。

另一种方法是使用 /delta:

https://www.dropbox.com/developers/core/docs#delta

您可以不时致电此电话,了解您需要对当地状态进行的任何更改以恢复最新状态。

【讨论】:

  • 所以解决方案是在本地创建一个日志文件,我在其中保存每个下载文件的 REV。这是一个很好的解决方案。因此,我得出结论,我不能做相反的事情,但我已经部分解决了我的问题。谢谢。
猜你喜欢
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 2010-11-30
相关资源
最近更新 更多