transferir subir servidor otro net ejemplo descargar copiar archivos c# .net ftp network-programming

servidor - subir archivos ftp c#



Descargar archivo ZIP de FTP y copiar a la carpeta dentro del sitio web (1)

Encontrar algunos problemas al copiar un archivo zip desde una ubicación FTP. Solo copia y vacía el archivo, así que creo que hay algún problema con mi uso de StreamReader o StreamWriter.

Aquí está el código:

//read through directory details response string line = reader.ReadLine(); while (line != null) { if (line.EndsWith("zip")) //"d" = dir don''t need "." or ".." dirs { FtpWebRequest downloadRequest = (FtpWebRequest)FtpWebRequest.Create("ftp://" + ftpHost + line); //new Uri("ftp://" + ftpServerIP + DestinationFolder + fileInf.Name)); downloadRequest.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["FilesUser"], ConfigurationManager.AppSettings["FilesPass"]); downloadRequest.KeepAlive = false; downloadRequest.UseBinary = true; downloadRequest.Method = WebRequestMethods.Ftp.DownloadFile; string folderToWrite = HttpContext.Current.Server.MapPath("~/Routing/RoutingFiles/"); string folderToSave = HttpContext.Current.Server.MapPath("~/Routing/"); StreamReader downloadRequestReader = new StreamReader(downloadRequest.GetResponse().GetResponseStream()); DirectoryInfo downloadDirectory = new DirectoryInfo(folderToWrite); FileInfo file = new FileInfo(Path.Combine(downloadDirectory.FullName, line)); if (!file.Exists) { StreamWriter writer = new StreamWriter(Path.Combine(folderToWrite, line), false); writer.Write(downloadRequestReader.ReadToEnd()); using (var downloadResponseStream = response.GetResponseStream()) { } } } }

Cuando llega al final de esa sección, el archivo se ha copiado pero está vacío, así que no creo que esté leyendo correctamente la secuencia de un archivo comprimido. Alguien tiene alguna idea? He visto hablar de que FileStream es mejor para descargar archivos Zip, pero tampoco pude conseguir que funcionara.

Gracias.


Aquí hay un ejemplo que descarga un archivo de un ftp.

try { FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpAddr + "test.zip"); request.Credentials = new NetworkCredential(userName, password); request.UseBinary = true; // Use binary to ensure correct dlv! request.Method = WebRequestMethods.Ftp.DownloadFile; FtpWebResponse response = (FtpWebResponse)request.GetResponse(); Stream responseStream = response.GetResponseStream(); FileStream writer = new FileStream("test.zip", FileMode.Create); long length = response.ContentLength; int bufferSize = 2048; int readCount; byte[] buffer = new byte[2048]; readCount = responseStream.Read(buffer, 0, bufferSize); while (readCount > 0) { writer.Write(buffer, 0, readCount); readCount = responseStream.Read(buffer, 0, bufferSize); } responseStream.Close(); response.Close(); writer.Close(); } catch (Exception e) { Console.WriteLine(e.ToString()); }

Editar Disculpe el error en el código anterior.

Al corregir mi código anterior, encontré útil el siguiente recurso: example