WinRT StorageFile写下载文件

时间:2012-07-06 13:31:18

标签: stream download windows-runtime webresponse storagefile

我正在努力解决一个简单的问题。我想使用以下代码从网上下载图片:

WebRequest requestPic = WebRequest.Create(@"http://something.com/" + id + ".jpg");
WebResponse responsePic = await requestPic.GetResponseAsync();

现在我想在StorageFile中编写WebResponse的流(例如,在应用程序的存储中创建一个文件id.jpg),但我还没有找到任何方法来实现它。我在网上搜索它,但没有成功 - 所有方式都不兼容Stream类型等等。

你能帮忙吗?

3 个答案:

答案 0 :(得分:12)

我找到了以下解决方案,该方案有效并且不太复杂。

    public async static Task<StorageFile> SaveAsync(
        Uri fileUri,
        StorageFolder folder,
        string fileName)
    {
        var file = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
        var downloader = new BackgroundDownloader();
        var download = downloader.CreateDownload(
            fileUri,
            file);

        var res = await download.StartAsync();            

        return file;
    }

答案 1 :(得分:7)

您需要将响应流读入缓冲区,然后将数据写入StorageFile。以下代码显示了一个示例:

        var fStream = responsePic.GetResponseStream();
        var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("testfile.txt");
        using (var ostream = await file.OpenStreamForWriteAsync())
        {
            int count = 0;
            do
            {
                var buffer = new byte[1024];
                count = fStream.Read(buffer, 0, 1024);
                await ostream.WriteAsync(buffer, 0, count);
            }
            while (fStream.CanRead && count > 0);
        }

答案 2 :(得分:0)