Dropbox.NET SDK listFolderLongpoll始终返回更改:true

Dropbox.NET SDK listFolderLongpoll始终返回更改:true,.net,api,sdk,dropbox,.net,Api,Sdk,Dropbox,我正在尝试使用Dropbox.NETSDK编写一些代码。我的目标与以下场景相关: 我有一个与一个人共享的主文件夹。此人偶尔会更改主文件夹中的文件。我在别处有一个共享文件夹的集合,每个文件夹都与不同的个人共享。主文件夹中的每个文件都需要复制到各个共享文件夹,具体取决于每个文件夹的共享对象。给定以下文件夹/文件结构: Master (folder) Master/a.txt Master/b.txt A (folder) B (folder) a、 txt需要从主机复制到主机 b、 txt

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

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

Master (folder)

Master/a.txt

Master/b.txt

A (folder)

B (folder)
a、 txt需要从主机复制到主机

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);
        }
    }
}
类程序
{
静态void Main(字符串[]参数)
{
var task=task.Run((Func)Program.Run);
task.Wait();
}
静态异步任务运行()
{
尝试
{
使用(var dbx=new Dropbox.Api.DropboxClient(“”)
{
var listFolderArg=new listFolderArg(“/master”,true);
var cursor=await dbx.Files.ListFolderAsync(listFolderArg);
ListFolderLongpollArg ListFolderLongpollArg=新的ListFolderLongpollArg(cursor.cursor,30);
var lp=await dbx.Files.ListFolderLongpollAsync(listFolderLongPollArg);
if(lp.变更)
{
var res=await dbx.Files.ListFolderContinueAsync(新的ListFolderContinueArg(cursor.cursor));
}
}
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
}
}
}
我尝试先获取一个初始游标,然后调用
ListFolderLongpollAsync
,然后调用
ListFolderAsync
,以获取一个新游标,然后再调用
ListFolderLongpollAsync
,我想也许我需要找出在获取第一个和第二个游标之间是否有变化,但是结果相同

我到底错过了什么?

的结果,所有结果都取决于您提供的
光标值。为了报告
更改:false
,您需要为最新状态提供
光标。但是,您的代码并没有显示您正在存储最新的游标。您似乎总是/只使用返回的游标

为了及时了解最新状态,您需要每次调用并可能重复使用最后返回的
光标
,直到is
false
。文档中有关于处理这些条目的更多信息

顺便说一句,我从你的帖子中编辑了它,但是为了安全起见,你应该禁用该访问令牌,因为你公开发布了它。如果访问令牌用于您的帐户,您可以使用完全撤销对应用程序的访问

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