并行下载和上传流

时间:2015-01-28 01:17:19

标签: c# .net file-io

我有一个从网站下载文件的拉拔器应用程序。通常,它会下载整个文件,然后将其保存在某个位置,数据库或文件系统中。 一旦我从文件下载中获取字节,我希望能够将其流式传输到其他位置。基本上,用户应该能够在从实际网站下载文件时下载该文件。

不知道标题在这个意义上是否正确,但你明白了。

2 个答案:

答案 0 :(得分:0)

如果您有权访问正在下载的流,则可以使用Stream.CopyTo方法。

示例:

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;

var request  = WebRequest.Create( "http://example.com/file.dat" );
var response = request.GetResponse();

var client = new TcpClient();
client.Connect( "127.0.0.1", 1234 );

using( var sourceStream      = response.GetResponseStream() )
using( var destinationStream = client.GetStream() )
{
    sourceStream.CopyTo( destinationStream );
}

上面将向http://example.com/file.dat发出请求并开始下载,从那里它连接到任意TCP套接字并将数据从下载文件复制到TCP套接字。 CopyTo将阻止所有数据从sourceStream读取并写入destinationStream。目标流可以是您喜欢的任何内容; FileStreamMemoryStream或从WebResponse.GetResponseStream()返回的另一个代表上传而非下载的流。

答案 1 :(得分:0)

试试这个

public void testdownload(stream input)
{
    byte[] buffer = new byte[16345];
    using (FileStream fs = new FileStream(this.FullLocalFilePath,
                    FileMode.Create, FileAccess.Write, FileShare.None))
{
        int read;
        while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
        {
           fs.Write(buffer, 0, read);
        }
    }
}