Как создать каталог на FTP-сервере с помощью C#?

StackOverflow https://stackoverflow.com/questions/860638

  •  21-08-2019
  •  | 
  •  

Вопрос

Каков простой способ создать каталог на 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 похоже, нет никаких методов для этого.

Это было полезно?

Решение

Использовать 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.comComponentpro.com/ftp.net/ и этот пример: http://www.comComponentpro.com/doc/ftp/Creating-a-new-directory-Synchronous.htm

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top