UWP中的自定义库

时间:2017-01-27 12:17:23

标签: c# uwp onedrive

我计划在UWP上开发电子书阅读器应用程序。但我有一点实施存储概念。所以我想存档以下内容。

  • 用户可以将自定义文件夹设置为电子书库。此文件夹将包含所有电子书(目前尚无问题)
  • 与Groove一样,我希望能够“流式传输”电子书(只能临时下载)或永久下载。

对于移动平台,这种方法很好,但是当谈到桌面时,就会出现问题:

通常,用户将拥有同步的ondrive文件夹。因此该文件夹可以是永久性的。使用ondrive api,应用程序将不知道此文件夹并且无法使用它。使用相同的缓存算法会导致重复。

我遇到的解决方法是,要求桌面上的用户手动从文件树中选择文件夹,不要存储任何本地文件。但如果用户决定不同步电子书库,这可能会导致问题。

那么有一种“扼杀”的存档方式吗?

2 个答案:

答案 0 :(得分:1)

为什么不使用OneDrive API来存储文件,并将其留下来解决同步和远程连接问题?

答案 1 :(得分:1)

我在评论中提到的工具包现已发布。

请参阅this blog post了解摘要:

  

OneDrive服务。使用简化的API模型(类似于StorageFolder)通过新的OneDrive服务漫游用户文件。新服务使您可以轻松地以与工具包服务相同的一致方式对OneDrive用户进行身份验证。

或者您可以直接转到documentation,了解如何利用UWP应用中的功能。

最简单的方法是,您可以使用以下方式访问当前用户的OneDrive的根目录:

var folder = await OneDriveService.Instance.RootFolderAsync();

下载文件内容的一个例子是:

var remoteFile=await parentFolder.GetFile("File.docx"); 

using (var remoteStream = await remoteFile.OpenAsync())
 {
     byte[] buffer = new byte[remoteStream.Size];
     var localBuffer = await remoteStream.ReadAsync(buffer.AsBuffer(), (uint)remoteStream.Size, InputStreamOptions.ReadAhead);
     var localFolder = ApplicationData.Current.LocalFolder;
     var myLocalFile = await localFolder.CreateFileAsync($"{oneDriveFile.Name}", CreationCollisionOption.GenerateUniqueName);
     using (var localStream = await myLocalFile.OpenAsync(FileAccessMode.ReadWrite))
     {
         await localStream.WriteAsync(localBuffer);
         await localStream.FlushAsync();
     }
 }