我在这里使用这个例子:http: //msdn.microsoft.com/en-us/library/ms229715.aspx 将一个大的1GB文件上传到FTP服务器.然而它在线上窒息:
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
Run Code Online (Sandbox Code Playgroud)
有一个内存不足的例外.有没有办法将文件从磁盘直接流式传输到FTP服务器,而无需立即将所有文件读入内存?我希望我可以将它分块并一点一点地发送它,但我想我能够将读取流指向写入流...
您可以尝试简单地以块的形式写入请求流 - 如果您使用的是.NET 4,那么Stream.CopyTo这将非常简单:
using (Stream input = File.OpenRead(filename))
{
using (Stream output = request.GetRequestStream())
{
input.CopyTo(output);
}
}
Run Code Online (Sandbox Code Playgroud)
你可能想查看一下FtpWebRequest文档,看看是否有关于缓冲的内容 - 基本上你想要禁用那里的任何缓冲.
(另一方面,在没有using语句的资源处理方面,它在MSDN中是一个令人震惊的糟糕示例.Ick.)
| 归档时间: |
|
| 查看次数: |
1125 次 |
| 最近记录: |