【问题标题】:Dropbox .NET SDK listFolderLongpoll always returns changes : trueDropbox .NET SDK listFolderLongpoll 总是返回更改:true
【发布时间】:2017-04-11 05:03:54
【问题描述】:

我正在尝试使用 Dropbox .NET SDK 编写一些代码。我的目标与以下场景有关:

我有一个与一个人共享的主文件夹。该人偶尔会更改主文件夹中的文件。我在其他地方有一组共享文件夹,每个文件夹都与不同的个人共享。主文件夹中的每个文件都需要复制到各个共享文件夹,具体取决于每个文件夹的共享对象。给定以下文件夹/文件结构:

Master (folder)

Master/a.txt

Master/b.txt

A (folder)

B (folder)

a.txt需要从Master复制到A

b.txt需要从Master复制到B

目前此复制是手动完成的。我的目标是自动化这个过程。这是我坚持的:

DropboxClient.Files.ListFolderLongpollAsync 始终返回 true,即使没有任何更改。此外,当我根据ListFolderLongpollResult.Changes 的文档调用DropboxClient.Files.ListFolderContinueAsync 以获取更改的文件时,Entries 属性为空。即使在我对文件进行更改后也是如此。

这是我的代码:

class Program
{
    static void Main(string[] args)
    {
        var task = Task.Run((Func<Task>)Program.Run);
        task.Wait();
    }

    static async Task Run()
    {
        try
        {
            using (var dbx = new Dropbox.Api.DropboxClient("<ACCESS_TOKEN>"))
            {
                var listFolderArg = new ListFolderArg("/master", true);

                var cursor = await dbx.Files.ListFolderAsync(listFolderArg);

                ListFolderLongpollArg listFolderLongPollArg = new ListFolderLongpollArg(cursor.Cursor, 30);

                var lp = await dbx.Files.ListFolderLongpollAsync(listFolderLongPollArg);

                if (lp.Changes)
                {
                    var res = await dbx.Files.ListFolderContinueAsync(new ListFolderContinueArg(cursor.Cursor));
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

我尝试获取初始光标,然后调用 ListFolderLongpollAsync,然后调用 ListFolderAsync 以获取新光标,然后再调用 ListFolderLongpollAsync,我想也许我需要找出是否有在获取第一个和第二个光标之间发生了变化,但结果是一样的。

我到底错过了什么?

【问题讨论】:

    标签: .net api sdk dropbox


    【解决方案1】:

    ListFolderAsyncListFolderContinueAsyncListFolderLongpollAsync 的结果都取决于您提供的 cursor 值。为了让ListFolderLongpollAsync 报告changes: false,您需要为最新状态提供cursor。您的代码没有显示您存储最新的光标。你似乎总是/只使用ListFolderAsync返回的光标。

    为了了解最新状态,您需要调用ListFolderAsyncListFolderContinueAsync,可能会重复调用,每次都使用最后返回的cursor,直到ListFolderResult.HasMorefalse。该文档包含有关处理这些条目的更多信息。

    顺便说一句,我从您的帖子中删除了它,但为了安全起见,您应该禁用该访问令牌,因为您已公开发布它。如果访问令牌适用于您的帐户,您可以使用 the account security page 完全撤销对应用程序的访问权限。

    或者,您可以使用 API 仅禁用此访问令牌,例如,通过 TokenRevokeAsync

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-06
      • 2017-05-10
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多