Programa (en C#) que suba archivos por FTP

Seré breve. He encontrado esta implementación pero en la línea:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("...");

No me deja poner el servidor FTP que uso: ftp.usuarios.lycos.es. Por otro lado, según la línea:

StreamReader sourceStream = new StreamReader("testfile.txt");

No se donde, en que carpeta del proyecto y tal debe estar el archivo ese... Quizá los que sepais de Visual Basic me podais ayudar.

SAlu2, gracias
Hola:

Mis conocimientos de c# son nulos, pero suponiendo que sea similar al resto de lenguajes:
JAPosti escribió:...pero en la línea:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("...");

No me deja poner el servidor FTP que uso: ftp.usuarios.lycos.es.

Que error te da??, seguramente es que hayas escrito de manera incorrecta el ftp pero no se, por ejemplo que te hayas dejado el "ftp://" delante o algo asi, pero asi por ciencia infusa poco mas puedo decir.
JAPosti escribió:Por otro lado, según la línea:

StreamReader sourceStream = new StreamReader("testfile.txt");

No se donde, en que carpeta del proyecto y tal debe estar el archivo ese...

Creo que deberia de estar en la carpeta principal del proyecto, pero te va a tocar probarlo.

Saludos
El caso es que el host del ftp de lycos es ftp.usuarios.lycos.es el problema es que ese parámetro sólo admite direcciones del tipo 'ftp://' ...

bueno, al fin y al cabo lo que quiero es recibir la información que un usuario me envíe al rellenar el formulario que contiene mi programa... La forma que se me ocurre es esta, subiendola a una cuenta FTP que yo tengo... aunque quizá hay alguna otra mas sencilla ¿Que me deciis? ein?

Salu2 y gracias
JAPosti escribió:El caso es que el host del ftp de lycos es ftp.usuarios.lycos.es el problema es que ese parámetro sólo admite direcciones del tipo 'ftp://' ...


claro, has de poner "ftp://ftp.usuarios.lycos.es", lo de antes del :// es el protocolo a usar, normalmente no se pone porque los programas lo sacan de otra manera pero se deberia.

JAPosti escribió:bueno, al fin y al cabo lo que quiero es recibir la información que un usuario me envíe al rellenar el formulario que contiene mi programa... La forma que se me ocurre es esta, subiendola a una cuenta FTP que yo tengo... aunque quizá hay alguna otra mas sencilla ¿Que me deciis? ein?


Ahora mismo no se me ocurre nada mejor, podrias usar un formulario web tambien pero es pasar la dificultad a otro lado, aqui una vez tengas todos los formularios tendras que abrir archivo por archivo ya meterlo en una base de datos o un excel, en el caso del formulario web se podria encargar un servlet o un cgi, pero tampoco se si vas a poderlo hacer (me refiero a si tienes un servidor web propio o no).

Saludos
egc_bcn escribió:claro, has de poner "ftp://ftp.usuarios.lycos.es"


egc_bcn, ¡Muchas gracias por tu ayuda!, ese era mi problema. Por si a alguien le sirve de ayuda además de eso hay que poner /nombreFicheroQueSubes, vamos que queda así:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.usuarios.lycos.es/prueba.txt");


Ahora me queda por saber una última cosa. El caso es que quiero enviarme un archivo con los datos que contiene el formulario. El problema es que mi solución o bien me parece un tanto guarra o es lo que hay:

Creo el archivo en, por ejemplo 'C:\', escribo sobre él los datos, luego lo subo a mi cuenta de FTP y por último lo borro...

¿Se haría así de 'guarro', no?, vamos, que el archivo no se puede trabajar 'en el aire' por decirlo de alguna forma...

Salu2 y muchas gracias!!
No hace falta que lo hagas tan guarro, si te fijas lo que hace con el archivo es simplemente abrirlo y meterlo en un array para poder enviarlo todo en un write.

Yo diria que si sustituyes esto:

StreamReader sourceStream = new StreamReader("testfile.txt");
byte [] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();


Por esto:

string texto = "la parrafada que quieras enviar";
byte [] fileContents = Encoding.UTF8.GetBytes(texto);


Deberia de funcionar.

No tengo demasiada idea de codificaciones, asi que puede ser que no haga falta guardarlo en un array ni codificarlo en utf8, quiza podrias en el write escribir directamente el texto, pero como parece que necesita saber de antemano la longitud de lo que le vas a enviar yo lo dejaria asi por si acaso.

Saludos
Genial egc_bcn, si que funciona. No sabía como hacerlo porque estoy empezando con esto... Muchas gracias por todas tus ayudas, si me surge alguna duda mas vuelvo a preguntar... Gracias!
6 respuestas