使用c#中的ftp下载图像文件,图像文件大小由固定大小的数组限定

时间:2011-12-12 21:55:37

标签: c# .net arrays image ftp

我正在尝试使用ftp下载图像文件,在我查找的每个代码上正在使用fixed sized array(因为bufferSize正在下面的代码中使用),我怎样才能有效地工作围绕这个并在运行时调整缓冲区大小,因为我正在处理大尺寸的图像。

 string[] ftpInfo = (string[])e.Argument;

            string uri = String.Format("ftp://{0}/{1}/images/{2}", ftpInfo[1], ftpInfo[2], ftpInfo[5]);

            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
            request.Method = WebRequestMethods.Ftp.DownloadFile;
            request.UseBinary = true;
            request.Credentials = new NetworkCredential(ftpInfo[3], ftpInfo[4]);

            FtpWebResponse response = (FtpWebResponse)request.GetResponse();
            Stream ftpStream = response.GetResponseStream();

            long cl = response.ContentLength;
            int bufferSize = 4096;  //Image file cannot be greater than 40 Kb
            int readCount = 0;
            byte[] buffer = new byte[bufferSize];
            MemoryStream memStream = new MemoryStream();
            readCount = ftpStream.Read(buffer, 0, bufferSize);
            while (readCount > 0)
            {
                memStream.Write(buffer, 0, readCount);
                readCount = ftpStream.Read(buffer, 0, bufferSize);
            }
            response.Close();

1 个答案:

答案 0 :(得分:3)

您不会遇到任何溢出问题。

ftpStream.Read(buffer, 0, bufferSize);

确保您不会阅读超过'bufferSize'。

所以你读了一个大小达到bufferSize的块,把它写到MemoryStream并继续读取下一个块。

如果您担心自己写入MemoryStream的数据大小,可以使用其他Stream,例如FileStream