Subir Carpetas enteras por ftp en C#[SOLUCIONADO]

Iniciado por Pablo Videla, 30 Noviembre 2009, 22:38 PM

0 Miembros y 1 Visitante están viendo este tema.

Pablo Videla

Hola a todos, cómo estan, aqui les vengo a molestar nuevamente jajaja como muchas veces lo he hecho, bueno navegando por la red decidi buscar cómo subir archivos por ftp, funciona todo bien, pero busco cómo subir carpetas enteras y no logro conseguir ayuda, miren les dejo lo que tengo (osea lo que saque por internet) y diganme que podria agregar para subir carpetas enteras,gracias de antemano.


Código (csharp) [Seleccionar]


using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;


namespace FTP
{
   class Program
   {
       public void UploadFTP(string FilePath, string RemotePath, string Login, string Password)
       {
           using (FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read))
           {
               string url = Path.Combine(RemotePath, Path.GetFileName(FilePath));

               // Creo el objeto ftp
               FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(url);

               // Fijo las credenciales, usuario y contraseña
               ftp.Credentials = new NetworkCredential(Login, Password);

               // Le digo que no mantenga la conexión activa al terminar.
               ftp.KeepAlive = false;

               // Indicamos que la operación es subir un archivo...
               ftp.Method = WebRequestMethods.Ftp.UploadFile;

               // … en modo binario … (podria ser como ASCII)
               ftp.UseBinary = true;

               // Indicamos la longitud total de lo que vamos a enviar.
               ftp.ContentLength = fs.Length;

               // Desactivo cualquier posible proxy http.
               // Ojo pues de saltar este paso podría usar
               // un proxy configurado en iexplorer
               ftp.Proxy = null;

               // Pongo el stream al inicio
               fs.Position = 0;

               // Configuro el buffer a 2 KBytes
               int buffLength = 2048;
               byte[] buff = new byte[buffLength];

               int contentLen;

               // obtener el stream del socket sobre el que se va a escribir.
               using (Stream strm = ftp.GetRequestStream())
               {
                   // Leer del buffer 2kb cada vez
                   contentLen = fs.Read(buff, 0, buffLength);

                   // mientras haya datos en el buffer ….
                   while (contentLen != 0)
                   {
                       // escribir en el stream de conexión
                       //el contenido del stream del fichero
                       strm.Write(buff, 0, contentLen);
                       contentLen = fs.Read(buff, 0, buffLength);
                   }
               }
           }
       }
   
       static void Main(string[] args)
       {
           Program ftp = new Program();
           string carpeta, carpetaremota, login, pass;
           
           carpeta=@"C:\archivo.txt";
           carpetaremota = "ftp://ftp.tupagina.cl/public_html";
           login = "tuusuario";
           pass = "tuclave";

           try
           {
               ftp.UploadFTP(carpeta, carpetaremota, login, pass);
           }
           catch (Exception e)
           {
               Console.WriteLine("Error.. " +e.Message);
           }
           Console.WriteLine("Presione una tecla para terminar..");
           Console.ReadKey();
       }
   }
}




raul338

no se puede subir una carpeta literalmente.

Lo que se hace es subir archivo por archivo. CUando hay una subcarpeta, se envia un comando FTP que cree una subcarpeta con el mismo nombre y ahi se suben sus archivos....algo asi como "recursividad"....

No se cual sera el comando para crear una carpeta....pero puedes buscar en inet !! :laugh:

Pablo Videla

Ok entiendo, seguire buscando, estoy atento a sus respuestas  ;)

Pablo Videla

[OFF TOPIC]Disculpen el doble post, pero buscando en google me di cuenta que ya habia sido indexado el post XD osea se demoro como 30 minutos xD[/OFF TOPIC]

raul338

Cita de: BadDevil en 30 Noviembre 2009, 23:10 PM
[OFF TOPIC]Disculpen el doble post, pero buscando en google me di cuenta que ya habia sido indexado el post XD osea se demoro como 30 minutos xD[/OFF TOPIC]

jaja...la proxima vez en vez de hacer doble post, usa el boton "modificar" :P

Pablo Videla

Solucionado, no pude subir la carpeta pero subi todos los archivos de dicha carpeta con un simple ciclo llamando al Directory.GetFileName ajjajaj ya veo como lo hago para crear la carpeta antes, gracias.

anarquistadel89

Cita de: BadDevil en  1 Diciembre 2009, 01:42 AM
Solucionado, no pude subir la carpeta pero subi todos los archivos de dicha carpeta con un simple ciclo llamando al Directory.GetFileName ajjajaj ya veo como lo hago para crear la carpeta antes, gracias.

Comprueba antes de subir si la carpeta existe, si no existe igual existe alguna manera de crearla. Luego ya seria cuestion de meter los ficheros dentro.

Hago una suposicion ya que no se si se pueden crear carpetas desde ahi  :-\

PD: Estaba pensando en crear un gestor ftp y tu codigo me viene de muerte  :xD

anarquistadel89@googlewave.com