C#Windows将BackgroundDownloader存储到可移动存储中

时间:2013-07-06 10:49:44

标签: c# windows-runtime

我正在开发一款可在所有Windows 8设备上运行的应用程序(RT支持必备),我正在努力添加一些离线功能,但我无法弄清楚如何下载到可移动存储设备,如USB驱动器,或者在Surface RT的情况下,micro SD卡。理想情况下,我希望能够让用户指定目录,但最终可能会下载数百个文件,因此必须只指定一次,而不是每个文件指定一次。我还想避免要求用户手动配置库。

我发现了很多关于如何下载到各种库的文章,但是这些文章会转到内部存储,因此Surface RT上的空间非常有限。如何让用户指定大量文件下载和/或下载到可移动存储设备的位置?

一个非常灵活的解决方案是在用户选择的位置以编程方式创建库的方法,以便用户可以在本地系统或可移动设备上选择是否需要它。

我感谢任何建议。

1 个答案:

答案 0 :(得分:0)

你应该利用FutureAccessList。它允许您重用用户以前授予您访问权限的文件和文件夹。

首先,用户将使用FolderPicker

选择目标文件夹
var picker = new FolderPicker();
picker.FileTypeFilter.Add("*");
var folder = await picker.PickSingleFolderAsync();

然后将文件夹添加到FutureAccessList并获取一个字符串标记,您可以存储该标记以供日后使用(例如ApplicationData.LocalSettings):

var token = StorageApplicationPermissions.FutureAccessList.Add(folder);

如果要下载文件,请首先从FutureAccessList获取文件夹并创建目标文件:

var folder = await StorageApplicationPermissions.FutureAccessList
                                                .GetFolderAsync(token);
var file = await folder.CreateFileAsync(filename);

使用该数据,您可以创建DownloadOperation

var downloader = new BackgroundDownloader();
var download = downloader.CreateDownload(uri, file);

从此处开始,就像下载到任何其他位置一样(开始下载,监控进度......)。