Quel est un moyen simple de créer un répertoire sur un serveur FTP en utilisant C #?
J'ai compris 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 souhaite télécharger vers users/abrien
, J'obtiens un WebException
indiquant que le fichier n'est pas disponible. Je suppose que c'est parce que je dois créer le nouveau dossier avant de télécharger mon fichier, mais WebClient
ne semble pas avoir de méthode pour y parvenir.
Utilisez FtpWebRequest
, avec une méthode 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);
}
}
}
Voici la réponse si vous souhaitez créer des répertoires imbriqués
Il n'y a aucun moyen propre de vérifier si un dossier existe sur le ftp, vous devez donc boucler et créer toute la structure imbriquée un dossier à la fois
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 ça:
// 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 tard. comme c'est étrange.)