我正在尝试下载一个文件并暂停然后恢复它并将最新的Range标头传递给它并寻找我已经在文件中下载的部分然后继续在其上书写。
问题是,当我使用取消令牌暂停我的下载时,我丢失了我在响应对象中下载的部分,它变为空....所以如何在同步中同时下载和写入文件方式?
这是我的代码:
Windows Store app 8.1 Xaml pausing/resuming download using http classes
并且我在使用它时受到限制,因为它在下载中提供了身份验证和标题。
请不要建议使用后台下载程序api,除非您已经测试了自己的暂停功能,因为我自己测试了它并且它很少正常工作。
答案 0 :(得分:0)
您提供的链接上的示例会在一次调用中将源流复制到dest流。如果您希望能够恢复已取消的下载,那么您应该获取源流,然后在循环中读/写小块。然后,如果因任何原因取消下载,则在重新启动下载之前,您可以检查已下载的部分文件的大小,并设置相应的范围标题。
编辑(添加示例代码):
using (Stream destStream = await destFile.OpenStreamForWriteAsync())
{
using (HttpClient httpClient = new HttpClient())
{
var s = await httpClient.GetInputStreamAsync(new Uri(srcUrl));
using (Stream srcStream = s.AsStreamForRead())
{
byte[] buffer = new byte[32768];
int read;
while ((read = srcStream.Read(buffer, 0, buffer.Length)) > 0)
{
destStream.Write(buffer, 0, read);
}
}
}
}