我正在尝试使用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
我需要找出第一个和第二个光标之间是否有变化,但结果是相同的。
我错过了什么?
答案 0 :(得分:0)
ListFolderAsync
,ListFolderContinueAsync
和ListFolderLongpollAsync
的结果全部取决于您提供的<?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
重复调用ListFolderAsync
和ListFolderContinueAsync
,直到{{3是cursor
。该文档提供了有关处理这些条目的更多信息。
顺便说一下,我是从你的帖子中编辑的,但为了安全起见,你应该禁用该访问令牌,因为你是公开发布的。如果访问令牌适用于您的帐户,则可以使用ListFolderResult.HasMore
完全撤消对应用的访问权限。
或者,您可以使用API禁用此访问令牌,例如通过the account security page。