system.array不包含ToArray的定义,也没有扩展方法
我试图使用FTPWebRequest在我的wcf块中从FTP复制文件,下面是代码。system.array不包含ToArray的定义,也没有扩展方法
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();
}
在 “使用” 块
通过 “DotNetUser” 成员建议,我发现一件事在代码 outputStream.Write(newbuffer.ToArray(),0,readCount);抛出一个异常在“ToArray”,它假设像outputStream.Write(newbuffer,0,readCount);请给我建议。
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);
为什么ToArray()
? newbuffer
是一个字节数组,你可以写这样的:
outputStream.Write(newbuffer, 0, readCount);
然而,你可能会进口System.Linq
命名空间。
你并不需要一个临时缓冲区 - 只需直接复制使用CopyTo()
流(.NET 4所要求):
using (Stream input = response.GetResponseStream())
{
input.CopyTo(outputStream);
}
感谢一群家伙,我正在使用outputStream.Write(newbuffer,0,readCount); 它工作正常,但由另一个专家(DotNetuser)通过*建议,所以我试图执行他的代码,它开始在ToArray上抛出异常,然后我以为我错过了某些东西。这就是为什么我在这里问。你能否拿出谁给我的“减”声誉? – Usher 2012-01-30 03:04:16
'数组''不执行'IEnumerable'这是'ToArray'方法扩展的类型。 'newbuffer'已经是'Array'类型了,你为什么需要转换它? –
2012-01-30 01:53:05
你在问题结尾写了你自己的答案。你是否尝试过这种方法,并为它工作?如果没有,你给了什么错误? – 2012-01-30 01:53:29
@ M.Babcock:你从哪里得到错误的想法,即数组没有实现'IEnumerable'?从规范:“在.NET Framework 2.0版中,Array类实现了System.Collections.Generic.IList ,System.Collections.Generic.ICollection 和System.Collections.Generic。 IEnumerable '通用接口。“当然,你的第二点是正确的。 –
jason
2012-01-30 01:56:40