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
.
我正在尝试使用 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
.