WinRT StorageFile写下载文件

Mar*_*und 9 webresponse download stream windows-runtime storagefile

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

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

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

能否请你帮忙?

Mar*_*und 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;
    }
Run Code Online (Sandbox Code Playgroud)


小智 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);
        }
Run Code Online (Sandbox Code Playgroud)