我正在编写的程序的一部分需要连接到OneDrive并重复删除文件(这里有一个包含大量文件的文件夹,其中许多文件也可以在用户的OneDrive中找到,可能使用不同的文件名)
所以给定一个特定的文件,我需要一种方法来搜索重复项(如果它们存在,我将删除第一个文件)。 OneDrive提供文件哈希;我只需要能够通过搜索找到傻瓜。
OneDrive Explorer C#示例(https://github.com/OneDrive/onedrive-explorer-win)显示了如何实现搜索,但搜索似乎只是索引文件名,内容和标记 - 而不是哈希。
通过哈希搜索的任何方式?否则我想我需要递归遍历用户的OneDrive中的每个项目并比较哈希......
答案 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,那么您可以进行将来的调用,并且只能看到自您上次执行重复数据删除以来已经更改的文件,并且是驱动器干净状态的密友。