Stream WinRT StorageFile写入下载的文件

Stream WinRT StorageFile写入下载的文件,stream,download,windows-runtime,webresponse,storagefile,Stream,Download,Windows Runtime,Webresponse,Storagefile,我正在努力解决一个简单的问题。我想使用以下代码从web下载图像: WebRequest requestPic = WebRequest.Create(@"http://something.com/" + id + ".jpg"); WebResponse responsePic = await requestPic.GetResponseAsync(); 现在我想将WebResponse的流写入一个存储文件(例如,在应用程序的存储中创建一个文件id.jpg),但我还没有找到任何方法来实现这一点

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

WebRequest requestPic = WebRequest.Create(@"http://something.com/" + id + ".jpg");
WebResponse responsePic = await requestPic.GetResponseAsync();
现在我想将WebResponse的流写入一个存储文件(例如,在应用程序的存储中创建一个文件id.jpg),但我还没有找到任何方法来实现这一点。我在网上搜索它,但没有成功——所有方式都是不兼容的流类型等等


您能帮忙吗?

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

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

我找到了下面的解决方案,它很有效,也不太复杂

    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;
    }
public async静态任务SaveAsync(
Uri文件Uri,
StorageFolder文件夹,
字符串(文件名)
{
var file=await folder.CreateFileAsync(文件名,CreationCollisionOption.ReplaceExisting);
var downloader=new BackgroundDownloader();
var download=downloader.CreateDownload(
fileUri,
文件);
var res=wait download.StartAsync();
返回文件;
}

这是可以做到的。答案是。

回答得很好。简单,它的工作原理完美。读取“不完整”文件时不再出现问题。谢谢你,伙计。