Как скачать сжатый файл (.zip) через FTP с помощью C #? - PullRequest
4 голосов
/ 13 февраля 2010

Как скачать .zip формат файла с помощью кода c #?

Вот код, который я использую для загрузки. Просто чтобы выделить, если я загружаю .txt файл, он работает нормально. Если я загружаю файл .zip, он загружает файл .zip, но я не могу его открыть. Он жалуется, что .zip в неправильном формате. У меня есть сомнения в том, как я записываю файл обратно на локальный диск.

Помощь

string ftpServerIP = FTPServer;
string ftpUserID = FTPUser;
string ftpPassword = FTPPwd;
FileInfo fileInf = new FileInfo(FileName);
string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri); //new Uri("ftp://" + ftpServerIP + DestinationFolder + fileInf.Name));
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
reqFTP.EnableSsl = true;
reqFTP.KeepAlive = false;
reqFTP.UseBinary = true;
//reqFTP.UsePassive = true;
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
//Stream strm = reqFTP.GetRequestStream();
StreamReader reader = new StreamReader(reqFTP.GetResponse().GetResponseStream());
StreamWriter writer = new StreamWriter(Path.Combine(FolderToWriteFiles, FileName), false);
writer.Write(reader.ReadToEnd());
return true; 

Ответы [ 5 ]

9 голосов
/ 13 февраля 2010
using System.Net;
// ...

new WebClient().DownloadFile("ftp://ftp.someurl.com/file.zip",
                             "C:\\downloadedFile.zip");

Ответ на обновленный вопрос:

Неверный способ сохранения потока на диск. Вы рассматриваете поток как последовательность символов, которая в процессе повреждает ZIP-файл. Откройте FileStream вместо StreamWriter и скопируйте возвращаемое значение GetResponseStream() непосредственно в это FileStream, используя что-то вроде my CopyStream, отсюда .

1 голос
/ 13 февраля 2010

Пространство имен .NET Framework System.Net предлагает класс FTPWebRequest. Вот статья, объясняющая, как ее использовать:

http://www.vcskicks.com/download-file-ftp.php

0 голосов
/ 18 апреля 2013

Для всех вас, кто нашел эти ответы бесполезными, я нашел лучший ответ здесь:

Загрузка ZIP-файла с FTP и копирование в папку на веб-сайте

0 голосов
/ 13 февраля 2010

Хорошая альтернатива расстегиванию молнии - http://www.codeplex.com/DotNetZip.

Если вам нужно загрузить шифрование SSH или SSL, я рекомендую этот компонент: http://www.weonlydo.com/index.asp?showform=FtpDLX.NET. Также отлично подходит для обычного FTP.

0 голосов
/ 13 февраля 2010

Возможно, вы захотите использовать класс FtpWebRequest для загрузки файла .zip, а затем класс System.IO.Packaging для извлечения его содержимого.

...