UWP 中的自定义库
Custom Library in UWP
我计划在 UWP 上开发电子书 reader 应用程序。但是我在实现存储概念时遇到了一些困难。所以我想存档以下内容。
- 用户可以将自定义文件夹设置为电子书库。此文件夹将包含所有电子书(目前没问题)
- 就像在 Groove 中一样,我希望能够 "stream" 电子书(仅临时下载)或永久下载。
对于移动平台,这工作正常,但当涉及到桌面时,就会出现问题:
通常用户会有一个同步的 ondrive 文件夹。因此该文件夹可能是永久可用的。使用 ondrive api,应用程序将不知道此文件夹并且无法使用它。使用相同的缓存算法会导致重复。
我想到的解决方法是,要求桌面用户手动 select 文件树中的文件夹,不要在本地存储任何内容。但是如果用户决定不同步电子书库,这可能会导致问题。
那么有没有 "smother" 方法来存档?
为什么不使用 OneDrive API 来存储文件并将其留给解决同步和远程连接问题?
我在评论中提到的工具包现已发布。
有关摘要,请参阅 this blog post:
OneDrive service. Roam user files through the new OneDrive service with a simplified API model (similar to StorageFolder). The new service makes it easy to authenticate OneDrive users and more in the same consistent way you have come to expect from the toolkit services.
或者您可以直接转到 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();
}
}
我计划在 UWP 上开发电子书 reader 应用程序。但是我在实现存储概念时遇到了一些困难。所以我想存档以下内容。
- 用户可以将自定义文件夹设置为电子书库。此文件夹将包含所有电子书(目前没问题)
- 就像在 Groove 中一样,我希望能够 "stream" 电子书(仅临时下载)或永久下载。
对于移动平台,这工作正常,但当涉及到桌面时,就会出现问题:
通常用户会有一个同步的 ondrive 文件夹。因此该文件夹可能是永久可用的。使用 ondrive api,应用程序将不知道此文件夹并且无法使用它。使用相同的缓存算法会导致重复。
我想到的解决方法是,要求桌面用户手动 select 文件树中的文件夹,不要在本地存储任何内容。但是如果用户决定不同步电子书库,这可能会导致问题。
那么有没有 "smother" 方法来存档?
为什么不使用 OneDrive API 来存储文件并将其留给解决同步和远程连接问题?
我在评论中提到的工具包现已发布。
有关摘要,请参阅 this blog post:
OneDrive service. Roam user files through the new OneDrive service with a simplified API model (similar to StorageFolder). The new service makes it easy to authenticate OneDrive users and more in the same consistent way you have come to expect from the toolkit services.
或者您可以直接转到 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();
}
}