【问题标题】:How to search by file hash using OneDrive SDK如何使用 OneDrive SDK 按文件哈希搜索
【发布时间】:2015-09-11 04:28:02
【问题描述】:
我正在编写的程序的一部分需要连接到 OneDrive 并删除重复文件(有一个包含大量文件的文件夹,其中许多文件也可以在用户 OneDrive 的其他地方找到,可能使用不同的文件名) .
所以给定一个特定的文件,我需要一种方法来搜索重复项(如果它们存在,我将删除第一个文件)。 OneDrive 提供文件哈希;我只需要能够通过它进行搜索即可找到受骗者。
OneDrive Explorer C# 示例 (https://github.com/OneDrive/onedrive-explorer-win) 展示了如何实现搜索,但搜索似乎只是索引文件名、内容和标签,而不是哈希。
有什么方法可以通过哈希搜索?否则我想我需要递归遍历用户 OneDrive 中的每个项目并比较哈希...
【问题讨论】:
标签:
c#
winforms
search
hash
onedrive
【解决方案1】:
OneDrive 不支持哈希搜索。
如果您希望多次重复数据删除,我建议您使用view.changes api 查看已更新的文件。
GET https://api.onedrive.com/v1.0/drive/root/view.changes?select=id,file
此查询已更改,因此它将仅返回驱动器中所有项目的项目 ID 和文件构面
{
...
"value": [{
"id": "DA56136E!124"
},
{
"id": "DA56136E!178",
"file": {
"hashes": {
"crc32Hash": "838920AE",
"sha1Hash": "23DCC6D4B5BFE00357FD0248BB5955B8E36BB8F1"
},
"mimeType": "image/gif"
}
},
...
在遵循@odata.nextLink 直到您枚举了整个文件集之后,您应该在驱动器中拥有所有项目 ID 以及与这些文件匹配的 sha1 或 crc32。然后您可以执行清理过程以删除已重复的文件。
如果您保留了 @changes.token,那么您可以在以后进行调用,并且只查看自上次执行重复数据删除后发生更改的文件,并了解驱动器的干净状态。