作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我知道当应用程序运行时,我们可以使用一些操作系统事件来识别文件系统的变化。我只是想知道应用程序何时未运行,如果我对文件系统进行了大量更改,例如添加/修改/删除/重命名几个文件和文件夹,Dropbox 使用什么算法来识别这些更改。我能想到的一件事是,通过将文件系统上文件的最后修改时间与应用程序运行时的 LMT 存储值进行比较。在这种情况下,无论如何我们都必须遍历所有文件。但是,如果我们重命名,LMT 不会改变。只是想看看有没有更好的方法,因为依赖 LMT 有其自身的问题?
有什么意见吗?
最佳答案
我不知道 Dropbox 是不是这样处理的,但这里有一个可能有用的策略:
您有一个由 Dropbox 处理的根目录。如果我是 Dropbox,我会为服务器上的每个文件保留哈希值。从根开始,应用程序将扫描文件树(目录 + 文件)并计算每个文件的哈希值。
扫描将导致双索引哈希表。每个文件和目录都将使用其相对路径(从根 Dropbox 目录)编制索引。将使用每个文件的哈希值创建第二个索引。
现在,应用程序已经扫描并建立了双索引哈希表。然后服务器将发送元组(相对路径、文件的哈希值)。让 (f, h) 成为这样一个文件元组:
请注意,此策略需要一个同步机制来了解,当遇到匹配项时,文件是否必须在客户端或服务器上更新。这可以通过存储 Dropbox(在客户端和服务器上)最后一次运行更新的时间以及谁执行了最后一次更新(在服务器上)来实现。
关于algorithm - 当应用程序未运行时,Dropbox 用于识别本地更改的文件/文件夹列表的算法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28247493/
我是一名优秀的程序员,十分优秀!