Pregunta

¿Cuál es una manera fácil de crear un directorio en un servidor FTP usando C #?

Me di cuenta de cómo cargar un archivo en una carpeta ya existente como esto:

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, consigo un WebException diciendo que el archivo no está disponible. Supongo que esto se debe a que necesito para crear la nueva carpeta antes de subir mi archivo, pero WebClient no parecen tener ningún método para lograrlo.

¿Fue útil?

Solución

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

Otros consejos

Aquí está la respuesta si desea crear directorios anidados

No hay manera limpia para comprobar si una carpeta existir en el ftp lo que tiene que bucle y crear toda la estructura anidada 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.)

Creación de un directorio FTP podría ser complicado ya que hay que comprobar si existe la carpeta de destino o no. Puede que tenga que utilizar una biblioteca de FTP para comprobar y crear un directorio. Puede echar un vistazo a la siguiente: http://www.componentpro.com/ftp.net/ y este ejemplo: http: // www. componentpro.com/doc/ftp/Creating-a-new-directory-Synchronously.htm

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top