sharp - cómo descargar un archivo comprimido(.zip) a través de FTP usando c#?
sharp ssh (5)
El espacio de nombres System.Net de .NET Framework ofrece la clase FTPWebRequest. Aquí hay un artículo que explica cómo usarlo:
¿Cómo descargar el formato de archivo .zip usando el código c #?
Aquí está el código, estoy usando para descargar. Solo para resaltar, si descargo el archivo .txt, funciona bien. Si descargo el archivo .zip, descarga el archivo .zip pero no puedo abrirlo. Se queja de que .zip está en formato incorrecto. Tengo dudas sobre cómo estoy escribiendo el archivo en la unidad local.
¿Ayuda?
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;
Probablemente desee utilizar la clase FtpWebRequest para descargar el archivo .zip y luego la clase System.IO.Packaging para extraer su contenido.
Una buena alternativa para descomprimir es http://www.codeplex.com/DotNetZip .
Si necesita descargar cifrado SSH o SSL, le recomiendo este componente: http://www.weonlydo.com/index.asp?showform=FtpDLX.NET . También es ideal para FTP simple.
Para todos los que encontraron estas respuestas inútiles, encontré una mejor respuesta aquí:
Descargar archivo ZIP de FTP y copiar a la carpeta dentro del sitio web
using System.Net;
// ...
new WebClient().DownloadFile("ftp://ftp.someurl.com/file.zip",
"C://downloadedFile.zip");
Responda a la pregunta actualizada:
La forma en que está guardando la transmisión en el disco es incorrecta. Está tratando el flujo como una secuencia de caracteres, lo que corrompe el archivo ZIP en el proceso. Abra un FileStream
lugar de un StreamWriter
y copie el valor de retorno GetResponseStream()
directamente en ese FileStream
utilizando algo así como mi función CopyStream
desde aquí .