Dropbox .NET SDK listFolderLongpoll 始终 returns 更改:true

Dropbox .NET SDK listFolderLongpoll always returns changes : true

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

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

Master (folder)

Master/a.txt

Master/b.txt

A (folder)

B (folder)

a.txt需要从Master复制到A

b.txt需要从Master复制到B

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

DropboxClient.Files.ListFolderLongpollAsync 总是 returns 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,我想也许我需要查明获取第一个和第二个光标之间是否有变化,但结果是一样的。

我到底错过了什么?

ListFolderAsync, ListFolderContinueAsync, and ListFolderLongpollAsync all depend on the cursor value that you supply. In order for ListFolderLongpollAsync to report changes: false, you need to supply a cursor for the up to date state. Your code doesn't show you storing the latest cursor though. You seem to be always/only using the cursor returned by ListFolderAsync的结果。

为了获得最新状态,您需要调用 ListFolderAsync and ListFolderContinueAsync, possibly repeatedly, using the last returned cursor each time, until ListFolderResult.HasMore is false。该文档包含有关处理这些条目的更多信息。

顺便说一句,我从您的 post 中编辑了它,但是为了安全起见,您应该禁用该访问令牌,因为您 post 公开编辑了它。如果访问令牌适用于您的帐户,您可以通过使用 the account security page.

完全撤销对应用程序的访问来实现此目的

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