现在我被API困了两天...我正在创建一个游戏启动器,我需要在其中将游戏客户端的所有文件从Dropbox下载(同步)到用户。
我的目标是检查本地文件中是否存在我的保管箱帐户中的文件,如果不存在,则下载到特定文件夹中。
使用异步任务有点令人沮丧...但是我需要我的应用程序在检查和下载文件时做出响应,还需要使用进度条显示已下载的特定文件。我不想下载一个Zip文件,因为如果我在客户端中进行了一些小改动,我不希望用户一次又一次地下载整个客户端...
要检查文件是否已被修改,我想使用散列方法,但是我不知道如何使用它……所以我认为使用文件大小作为参考会更容易?
一天后,我终于做了一个简单的Dropbox文件和目录列表...这对A人来说是一个痛苦...
但是我注意到无法在异步检查中异步下载文件?还是我做错了什么?我对C#有所了解,但是在理解异步功能时总是遇到问题...
所以我的问题是: -如何比较Dropbox目录中的特定文件与本地文件是否已被修改(如果以前已下载过)? -如何将文件异步下载到同一本地文件夹? -如何实现显示文件名和进度百分比(0-100)的进度条?
我希望您能以某种方式为我提供帮助,我之前在google上搜索过一个解决方案,但是我没有运气,或者我不了解具体的解决方案。 Google云端硬盘对我来说太复杂了,所以我希望我能在使用Dropbox时遇到一些麻烦...
对不起我的英语,我不是说英语的人!
哦,是的,这是我的代码:
static async Task CheckFiles()
{
using (var dbx = new DropboxClient(token))
{
var amount = 0;
var list = await dbx.Files.ListFolderAsync(string.Empty, true, false, false, false, true);
string directoryPath;
Debug.WriteLine("Dropbox File lister BEGIN");
foreach (var item in list.Entries.Where(i => i.IsFolder))
{
Debug.WriteLine("Directory: " + item.AsFolder.PathDisplay);
directoryPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + ClientDirectory + item.PathDisplay;
Directory.CreateDirectory(directoryPath);
amount++;
}
foreach (var item in list.Entries.Where(i => i.IsFile))
{
Debug.WriteLine("File: {0} | Directory: {1} | Size: {2} | Hash: {3}", item.Name, Path.GetDirectoryName(item.PathDisplay), item.AsFile.Size, item.AsFile.ContentHash);
//That's not working!
using (var response = dbx.Files.DownloadAsync(Path.GetDirectoryName(item.PathDisplay) + "/" + item.Name))
{
Debug.WriteLine(response.GetContentAsStringAsync());
}
//
amount++;
}
Debug.WriteLine("Dropbox File lister END - Found: {0} entries", amount);
}
}
最诚挚的问候!