Как создать каталог на ftp-сервере с помощью C#?
какой простой способ создать каталог на FTP-сервере с помощью C#?
Я понял, как загрузить файл в уже существующую папку такой:
using (WebClient webClient = new WebClient())
{
string filePath = "d:/users/abrien/file.txt";
webClient.UploadFile("ftp://10.128.101.78/users/file.txt", filePath);
}
однако, если я хочу загрузить в users/abrien, Я WebException говоря, что файл недоступен. Я предполагаю, что это потому, что мне нужно создать новую папку перед загрузкой моего файла, но WebClient похоже, у него нет никаких методов для этого.
4 ответов:
использовать
FtpWebRequestспособомWebRequestMethods.Ftp.MakeDirectory.например:
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); } } }
вот ответ, если вы хотите создать вложенные каталоги
нет чистого способа проверить, существует ли папка на ftp, поэтому вам нужно зациклиться и создать всю вложенную структуру одной папки в то время
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... } } }
что-то вроде этого:
// remoteUri points out an ftp address ("ftp://server/thefoldertocreate") WebRequest request = WebRequest.Create(remoteUri); request.Method = WebRequestMethods.Ftp.MakeDirectory; WebResponse response = request.GetResponse();(немного поздно. как странно.)
создание каталога FTP может быть сложным, так как вы должны проверить, существует ли папка назначения или нет. Для проверки и создания каталога может потребоваться использовать библиотеку FTP. Вы можете взглянуть на это:http://www.componentpro.com/ftp.net/ и этот пример: http://www.componentpro.com/doc/ftp/Creating-a-new-directory-Synchronously.htm
Comments