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

本文关键字:图像 小数 数组 文件大小 FTP 文件 下载 | 更新日期: 2023-09-27 18:17:51

我正在尝试使用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();

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

不会有任何溢出问题。

ftpStream.Read(buffer, 0, bufferSize);

确保你不会读取超过'bufferSize'。

读取一个大小为bufferSize的块,将其写入MemoryStream并继续读取下一个块。

如果您担心写入MemoryStream的数据大小,您可以使用另一个Stream,例如FileStream