[英]How to ZIP files in FTP Server Directory
在我的应用程序中,我需要从FTP服务器下载一些文件。我编码通过for循环逐个下载并且它工作正常。我的问题是它是非常慢的进程因为每个文件它将给出凭证。 因此,如果我可以在FTP服务器中压缩这些文件,它可以快速下载..如果有一种方式请指导我..这里我的代码:
大段引用
private void button1_Click(object sender, EventArgs e)
{
string[] list = GetFileList();
DownloadFile(list, "e:\\sample\\");
}
private String[] GetFileList()
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri(_remoteHost));
request.Credentials = new NetworkCredential(_remoteUser, _remotePass);
request.Method = WebRequestMethods.Ftp.ListDirectory;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
string FileNames = reader.ReadToEnd();
string[] Files = Regex.Split(FileNames, "\r\n");
return Files;
}
private void DownloadFile(string[] fileList, string destination)
{
for (int i = 2; i <= fileList.Length - 1; i++)
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(_remoteHost + fileList[i]);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential(_remoteUser, _remotePass);
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
StreamWriter writer = new StreamWriter(destination + fileList[i]);
writer.Write(reader.ReadToEnd());
writer.Close();
reader.Close();
response.Close();
}
}
大段引用
为什么不用用户名和密码启动你的FtpWebRequest一次,然后在foreach循环中为所有文件使用它而不是每轮创建一个新文件?
另一种方法是使用第三方工具(如: http : //www.rebex.net/ftp-ssl.net/ )可能更快,但它必须测试,看看这个: https://stackoverflow.com/a/2343689/395659
第三种方法可能是让服务器在一段时间内创建ZIP文件的服务器上运行,然后将其作为Zip文件下载,如问题中所述。
您可以重新使用凭据,这可能会加快您的速度......
private void DownloadFile(string[] fileList, string destination)
{
var myCred = new NetworkCredential(_remoteUser, _remotePass);
for (int i = 2; i <= fileList.Length - 1; i++)
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(_remoteHost + fileList[i]);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = myCred;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
StreamWriter writer = new StreamWriter(destination + fileList[i]);
writer.Write(reader.ReadToEnd());
writer.Close();
reader.Close();
response.Close();
}
}
如果您使用的是.NET 3.0或更高版本,则可以使用System.IO.Packaging名称空间中的ZipPackage类 。 我还没有尝试压缩远程计算机上存在的文件,但你可以试一试,否则你可能需要编写一个小工作来压缩文件并将其部署在远程(ftp)服务器上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.