首先,我想说的是,我试图研究如何理解我要问的问题,但就是想不出我想要的东西。话虽这么说,我想我会请你们中的一些疯狂的聪明人尽可能地用蹩脚的方式为我解释这一点。
我的问题是我有一个非常好的“复制粘贴”代码来使用 ftpWebRequest 下载文件。我将粘贴下面的代码:
public static void DownloadFiles()
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://****/test.zip");
request.Credentials = new NetworkCredential("****", "*****");
request.UseBinary = true;
request.Method = WebRequestMethods.Ftp.DownloadFile;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
FileStream writer = new FileStream("***/test.zip", FileMode.Create);
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[2048];
readCount = responseStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
writer.Write(buffer, 0, readCount);
readCount = responseStream.Read(buffer, 0, bufferSize);
}
responseStream.Close();
response.Close();
writer.Close();
}
就像我说的那样,这可以完美地下载 zip 文件,没有任何问题。我想理解的是,因为我认为“复制粘贴”代码是一个可怕的想法,这实际上是如何起作用的。我不明白的唯一部分是这些点之间实际发生的事情:
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[2048];
readCount = responseStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
writer.Write(buffer, 0, readCount);
readCount = responseStream.Read(buffer, 0, bufferSize);
}
如果有人愿意解释缓冲区中实际发生的情况,为什么我们将其设置为 2048 以及 while 循环实际在做什么,将不胜感激。就像我没有完成代码并放入消息框和其他调试一样尝试了解发生了什么但没有成功。提前谢谢你,如果这看起来很简单,我很抱歉。