【问题标题】:Windows 8.1 store xaml download and save file in synchronizeWindows 8.1 存储 xaml 下载并同步保存文件
【发布时间】:2014-06-05 02:36:23
【问题描述】:

我正在尝试下载一个文件并暂停它然后恢复它并将最新的 Range 标头传递给它并寻找我在文件中下载的部分然后继续写它。

问题是,当我使用取消令牌暂停我的下载时,我会丢失我在响应对象中下载的部分,它变为 null ....所以我如何才能同步下载和写入文件方式?

这是我的代码:

Windows Store app 8.1 Xaml pausing/resuming download using http classes

我使用它受到限制,因为它在下载中提供身份验证和标题。

请不要建议使用后台下载器 api,除非您自己测试了其中的暂停功能,因为我自己测试过它,它很少能正常工作。

【问题讨论】:

    标签: stream download windows-store-apps windows-8.1


    【解决方案1】:

    您提供的链接中的示例在一次调用中将源流复制到目标流。如果您希望能够恢复已取消的下载,那么您应该获取源流,然后在循环中读取/写入小块。那么如果由于某种原因取消了下载,在重新开始下载之前,您可以检查您已经下载的部分文件的大小并设置适当的范围标题。

    编辑(添加示例代码):

    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);
                }
            }                  
        }
    }
    

    【讨论】:

    • 是的,我理解这个概念,但我找不到适合这个问题的流类...你能建议我应该使用哪些类吗?
    • 我想我之前试过GetInputStreamAsync,问题是下载不支持get请求,它只接受post!
    • 从输入和输出流中获取“流”对象:var src = inputStream.AsStreamForRead(); var dest = outputStream.AsStreamForWrite();然后用读/写循环替换“CopyAndCloseAsync”调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多