¿Cómo creo un directorio en el servidor ftp usando C #?

¿Cuál es una manera fácil de crear un directorio en un servidor FTP usando 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 deseo subir a los users/abrien , recibo una WebException dice que el archivo no está disponible. Supongo que es porque necesito crear la nueva carpeta antes de cargar mi archivo, pero WebClient no parece tener ningún método para lograrlo.

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); } } } 

Aquí está la respuesta si quieres crear directorios nesteds

No hay una forma clara de comprobar si existe una carpeta en el ftp, por lo que debe crear un bucle y crear toda la estructura anidada en una carpeta en el momento

 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... } } } 

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, qué extraño)

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 de FTP para verificar y crear un directorio. Puede echarle un vistazo a este: http://www.componentpro.com/ftp.net/ y este ejemplo: http://www.componentpro.com/doc/ftp/Creating-a-new-directory-Sincronically .htm