我试图在我的wcf块中使用FTPWebRequest从FTP复制文件,这里是以下代码。
long cl = response.ContentLength;
int bufferSize = 4155;
int readCount=0;
int i = 0;
byte[] newbuffer;
byte[] buffer = new byte[bufferSize];
//Follow the Using here
using (Stream input = response.GetResponseStream())
{
readCount = input.Read(buffer, 0, buffer.Length);
if (readCount > 0)
{
newbuffer = new byte[readCount];
Array.Copy(buffer, newbuffer, readCount);
outputStream.Write(newbuffer.ToArray(), 0, readCount);
}
outputStream.Close();
}
ftpStream.Close();
response.Close();
}
在" USING"阻止由" DotNetUser"成员,我在代码中发现了一件事 outputStream.Write(newbuffer.ToArray(),0,readCount);在" ToArray"中抛出异常,它假设像outputStream.Write(newbuffer,0,readCount);请建议我。
答案 0 :(得分:3)
为什么ToArray()
? newbuffer
是一个字节数组,你可以这样写:
outputStream.Write(newbuffer, 0, readCount);
但是,您可以导入System.Linq
命名空间。
答案 1 :(得分:1)
newbuffer
变量已经是一个数组,因此您无需将其转换为数组。你可以使用:
outputStream.Write(newbuffer, 0, readCount);
但是,根本没有理由创建newbuffer
数组。只需从buffer
数组中写入数据:
readCount = input.Read(buffer, 0, buffer.Length);
if (readCount > 0) {
outputStream.Write(buffer, 0, readCount);
}
但是,这只会从流中读取第一个数据块。您需要循环,直到没有更多数据要阅读:
do {
readCount = input.Read(buffer, 0, buffer.Length);
if (readCount > 0) {
outputStream.Write(buffer, 0, readCount);
}
} until (readCount == 0);
答案 2 :(得分:0)
您不需要临时缓冲区 - 只需使用CopyTo()
直接复制流(需要.NET 4):
using (Stream input = response.GetResponseStream())
{
input.CopyTo(outputStream);
}