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

在c#中使用ftp下载图像文件,图像文件大小由固定大小数组限定,c#,.net,arrays,image,ftp,C#,.net,Arrays,Image,Ftp,我正在尝试使用ftp下载一个图像文件,在我查找的每一个代码上都使用了固定大小的数组(因为下面的代码中使用了bufferSize),我如何有效地解决这一问题,并在运行时调整缓冲区的大小,因为我正在处理大尺寸的图像 string[] ftpInfo = (string[])e.Argument; string uri = String.Format("ftp://{0}/{1}/images/{2}", ftpInfo[1], ftpInfo[2], ftpInfo[5]

我正在尝试使用ftp下载一个图像文件,在我查找的每一个代码上都使用了
固定大小的数组
(因为下面的代码中使用了
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();

您不会有任何溢出问题

ftpStream.Read(buffer, 0, bufferSize);
确保读取的内容不会超过“bufferSize”

因此,您可以读取一个大小为bufferSize的块,将其写入
MemoryStream
并继续读取下一个块


如果您关心写入
MemoryStream
的数据大小,您可以使用另一个
,例如
FileStream
,这是什么意思?你想做什么?固定大小的数组是缓冲区。您将数据流分块读取到缓冲区中。是的,缓冲区是固定大小的数组&我正在分块读取数据流。有什么问题?你想解决什么问题?如果数组大小是固定的,我可能会有溢出问题,所以我想在运行时调整数组大小+1最大值。有什么问题?文件没有下载吗?在while循环之后,整个文件都在内存中,这得益于MemoryStream。如果需要将文件保存到磁盘,请跳过MemoryStream,改为通过System.IO.file.create创建文件流,但映像不会完全下载,因为一旦达到全部容量,将构建缓冲区。while循环确保文件完全下载,每次4096字节。马克西姆给了你正确的答案。@jaminator-你确定它不能正常工作吗?尝试将其保存到文件并打开图像。