我正在尝试使用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();
答案 0 :(得分:3)
您不会遇到任何溢出问题。
ftpStream.Read(buffer, 0, bufferSize);
确保您不会阅读超过'bufferSize'。
所以你读了一个大小达到bufferSize的块,把它写到MemoryStream
并继续读取下一个块。
如果您担心自己写入MemoryStream
的数据大小,可以使用其他Stream
,例如FileStream
。