如何使用OneDrive SDK按文件哈希搜索

时间:2015-06-24 19:39:42

标签: c# winforms search hash onedrive

我正在编写的程序的一部分需要连接到OneDrive并重复删除文件(这里有一个包含大量文件的文件夹,其中许多文件也可以在用户的​​OneDrive中找到,可能使用不同的文件名)

所以给定一个特定的文件,我需要一种方法来搜索重复项(如果它们存在,我将删除第一个文件)。 OneDrive提供文件哈希;我只需要能够通过搜索找到傻瓜。

OneDrive Explorer C#示例(https://github.com/OneDrive/onedrive-explorer-win)显示了如何实现搜索,但搜索似乎只是索引文件名,内容和标记 - 而不是哈希。

通过哈希搜索的任何方式?否则我想我需要递归遍历用户的OneDrive中的每个项目并比较哈希......

1 个答案:

答案 0 :(得分:0)

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,那么您可以进行将来的调用,并且只能看到自您上次执行重复数据删除以来已经更改的文件,并且是驱动器干净状态的密友。