read - subir archivos ftp c#
¿Cómo creo un directorio en el servidor ftp usando C#? (4)
Algo como esto:
// remoteUri points out an ftp address ("ftp://server/thefoldertocreate")
WebRequest request = WebRequest.Create(remoteUri);
request.Method = WebRequestMethods.Ftp.MakeDirectory;
WebResponse response = request.GetResponse();
(Un poco tarde. Que extraño.)
¿Qué es una forma fácil de crear un directorio en un servidor FTP utilizando C #?
Descubrí cómo cargar un archivo en una carpeta ya existente como esta:
using (WebClient webClient = new WebClient())
{
string filePath = "d:/users/abrien/file.txt";
webClient.UploadFile("ftp://10.128.101.78/users/file.txt", filePath);
}
Sin embargo, si quiero subir a users/abrien
, recibo una WebException
dice que el archivo no está disponible. Supongo que esto se debe a que necesito crear la nueva carpeta antes de cargar mi archivo, pero WebClient
no parece tener ningún método para lograrlo.
Aquí está la respuesta si quieres crear directorios anidados.
No hay una forma clara de verificar si existe una carpeta en el ftp, por lo que debe realizar un bucle y crear toda la estructura anidada una carpeta a la vez.
public static void MakeFTPDir(string ftpAddress, string pathToCreate, string login, string password, byte[] fileContents, string ftpProxy = null)
{
FtpWebRequest reqFTP = null;
Stream ftpStream = null;
string[] subDirs = pathToCreate.Split(''/'');
string currentDir = string.Format("ftp://{0}", ftpAddress);
foreach (string subDir in subDirs)
{
try
{
currentDir = currentDir + "/" + subDir;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(currentDir);
reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(login, password);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
ftpStream = response.GetResponseStream();
ftpStream.Close();
response.Close();
}
catch (Exception ex)
{
//directory already exist I know that is weak but there is no way to check if a folder exist on ftp...
}
}
}
Crear un directorio FTP puede ser complicado, ya que debe verificar si la carpeta de destino existe o no. Es posible que necesite usar una biblioteca FTP para verificar y crear un directorio. Puede ver este: http://www.componentpro.com/ftp.net/ y este ejemplo: http://www.componentpro.com/doc/ftp/Creating-a-new-directory-Synchronously.htm
Utilice FtpWebRequest
, con un método de WebRequestMethods.Ftp.MakeDirectory
.
Por ejemplo:
using System;
using System.Net;
class Test
{
static void Main()
{
WebRequest request = WebRequest.Create("ftp://host.com/directory");
request.Method = WebRequestMethods.Ftp.MakeDirectory;
request.Credentials = new NetworkCredential("user", "pass");
using (var resp = (FtpWebResponse) request.GetResponse())
{
Console.WriteLine(resp.StatusCode);
}
}
}