在c#中使用ftp下载图像文件,图像文件大小由固定大小数组限定
我正在尝试使用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]
固定大小的数组
(因为下面的代码中使用了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-你确定它不能正常工作吗?尝试将其保存到文件并打开图像。