我在这里使用这个例子: http://msdn.microsoft.com/en-us/library/ms229715.aspx 将大型1GB文件上传到FTP服务器。然而它在线上窒息:
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
内存不足异常。有没有办法将文件从磁盘直接流式传输到FTP服务器,而无需立即将所有文件读入内存?我希望我可以将其分块并一点一点地发送,但我想我能够将读取流指向写入流...
答案 0 :(得分:5)
您可以尝试简单地以块的形式写入请求流 - 如果您使用的是.NET 4,Stream.CopyTo
将使这一切变得非常简单:
using (Stream input = File.OpenRead(filename))
{
using (Stream output = request.GetRequestStream())
{
input.CopyTo(output);
}
}
您可能需要查看FtpWebRequest
的文档,看看是否有关于缓冲的内容 - 基本上您要禁用任何缓冲。
(另一方面,在没有using
语句的资源处理方面,这是MSDN中一个令人震惊的糟糕例子.Ick。)
答案 1 :(得分:3)
一般来说,你要做的是写一个循环:
sourceStream
读取一个块(16 kB是合理的)requestStream