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

时间:2017-04-11 05:03:55

标签: .net api sdk dropbox

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

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

Master (folder)

Master/a.txt

Master/b.txt

A (folder)

B (folder)

a.txt需要从Master复制到A

b.txt需要从Master复制到B

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

即使没有任何更改,

DropboxClient.Files.ListFolderLongpollAsync始终会返回true。此外,当我根据DropboxClient.Files.ListFolderContinueAsync的文档调用ListFolderLongpollResult.Changes来获取更改的文件时,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我需要找出第一个和第二个光标之间是否有变化,但结果是相同的。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

ListFolderAsyncListFolderContinueAsyncListFolderLongpollAsync的结果全部取决于您提供的<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:fillViewport="true" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="none" android:paddingTop="xxxx" android:paddingBottom="xxx" android:clipToPadding="false"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/header" android:text="header" android:gravity="center_horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"/> <TextView android:id="@+id/subheader" android:layout_below="@+id/header" android:letterSpacing="-0.04" android:layout_marginTop="xxx" android:layout_height="wrap_content"/> <Button android:id="@+id/button" android:layout_below="@id/button" android:layout_marginTop="xxx" android:layout_width="xxx" android:layout_height="xxx"/> <TextView android:id="@+id/summary" android:layout_below="@+id/button" android:layout_marginTop="xxxx" android:layout_height="wrap_content"/> <TextView android:id="@+id/footer" android:layout_below="@+id/summary" android:layout_marginTop="xxxx" android:layout_width="match_parent" android:layout_height="wrap_content"/> </RelativeLayout> 值。要让ListFolderLongpollAsync报告cursor,您需要为最新状态提供changes: false。您的代码不会显示您存储最新的光标。您似乎总是/仅使用ListFolderAsync返回的光标。

为了了解最新状态,您需要每次使用上次返回的cursor重复调用ListFolderAsyncListFolderContinueAsync,直到{{3是cursor。该文档提供了有关处理这些条目的更多信息。

顺便说一下,我是从你的帖子中编辑的,但为了安全起见,你应该禁用该访问令牌,因为你是公开发布的。如果访问令牌适用于您的帐户,则可以使用ListFolderResult.HasMore完全撤消对应用的访问权限。

或者,您可以使用API​​禁用此访问令牌,例如通过the account security page