大家好,由于项目中需要一个FTP功能,具体上传下载倒是没什么问题,最大的问题是,FtpWebRequest只有一个create方法那里可以传递路径,导致如果我要更换一个文件夹的话,都要重新连接一次服务器,我相信微软没理由这么设计的,只是我没找到办法而已,请大家帮忙看看,怎样才能重复利用那个已经登录好的FtpWebRequest呢,不用重复登录。
下载的代码:
FtpWebRequest reqFTP;
try
{
FileStream outputStream = new FileStream(localPath, FileMode.Create);
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + m_ftpServerUrl + "/" + remotePath));
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(m_userName, m_password);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
long cl = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
while (readCount > 0) {
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
} ftpStream.Close();
outputStream.Close();
response.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
} 如上面的代码,如果我先是要下载"ftp://127.0.0.1/test/a.mp3"的,下载好后,要进入"ftp://127.0.0.1/download/a.mp3",那么又得执行一遍上面的代码,相当于重新去连接了一次服务器,那得多慢。我希望FtpWebRequest连接好以后,如果我没断开,应该可以重复用才对
下载的代码:
FtpWebRequest reqFTP;
try
{
FileStream outputStream = new FileStream(localPath, FileMode.Create);
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + m_ftpServerUrl + "/" + remotePath));
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(m_userName, m_password);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
long cl = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
while (readCount > 0) {
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
} ftpStream.Close();
outputStream.Close();
response.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
} 如上面的代码,如果我先是要下载"ftp://127.0.0.1/test/a.mp3"的,下载好后,要进入"ftp://127.0.0.1/download/a.mp3",那么又得执行一遍上面的代码,相当于重新去连接了一次服务器,那得多慢。我希望FtpWebRequest连接好以后,如果我没断开,应该可以重复用才对
解决方案 »
- C# 线程等待问题
- 求救!Winform DataGridView采用虚拟模式后 .Cells[0].Value 设的文字不显示
- 新手上路有想法实现不了,请高手指点!
- 通过EXCEL导入GridwView,再插入或更新到SQL数据
- ###如何用Micorsoft.Net中数字签名技术对OCX控件进行签名?(##高分###)####
- session问题
- 怎样在删除DataTable的行前加入检测语句?
- Application和Session问题
- 如何使自已的命名空间像System一样调用,而不用生成dll文件。
- 最有价值C#参考书一览~~~~~~~~~
- enum怎么读? flags是身什么意思?再枚举里
- 多个超级链接
谢谢,是不是说,微软没提供这样的方法?还是FTP本身就没提供这样的方法?只能下载一个文件,就连接一次服务器?
那里面的KeepAlive有什么用呢?