Question

Qu'est-ce qu'un moyen facile de créer un répertoire sur un serveur FTP en utilisant C #?

Je me suis dit comment télécharger un fichier dans un dossier déjà existant comme celui-ci:

using (WebClient webClient = new WebClient())
{
    string filePath = "d:/users/abrien/file.txt";
    webClient.UploadFile("ftp://10.128.101.78/users/file.txt", filePath);
}

Cependant, si je veux télécharger à users/abrien, je reçois un fichier WebException dire est indisponible. Je suppose que cela est parce que je dois créer le nouveau dossier avant de télécharger mon fichier, mais ne semble pas WebClient d'avoir des méthodes pour y parvenir.

Était-ce utile?

La solution

Utilisation FtpWebRequest, avec un procédé de WebRequestMethods.Ftp.MakeDirectory .

Par exemple:

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

Autres conseils

Voici la réponse si vous voulez créer des répertoires imbriqués

Il n'y a aucun moyen propre pour vérifier si un dossier existe sur le ftp de sorte que vous devez boucle et créer toute la structure imbriquée un dossier au moment

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

Quelque chose comme ceci:

// remoteUri points out an ftp address ("ftp://server/thefoldertocreate")
WebRequest request = WebRequest.Create(remoteUri);
request.Method = WebRequestMethods.Ftp.MakeDirectory;
WebResponse response = request.GetResponse();

(un peu en retard. Comment bizarre.)

Création d'un répertoire FTP pourrait être compliqué puisque vous devez vérifier si le dossier de destination existe ou non. Vous devrez peut-être utiliser une bibliothèque FTP pour vérifier et créer un répertoire. Vous pouvez jeter un oeil à celui-ci: http://www.componentpro.com/ftp.net/ et cet exemple: http: // www. componentpro.com/doc/ftp/Creating-a-new-directory-Synchronously.htm

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top