system.array不包含ToArray的定义,也没有扩展方法

时间:2012-01-30 01:49:12

标签: c#

我试图在我的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);请建议我。

3 个答案:

答案 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);
}