簡體   English   中英

如何在FTP服務器目錄中壓縮文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM