неэффективный способ создать подпапку в FTP - PullRequest
1 голос
/ 10 марта 2012

Я использовал Make directory для создания папок и подпапок в моем ftp (используя filezilla) работает нормально, но когда я пытаюсь сделать это на моем тестовом сервере (IIS FTP) не работает, выдает 550, файл не найден илиno access.so просто быстрый способ изменить код для создания подкаталога на моем ftp-сервере работает нормально, но я знаю, что это довольно дерьмовый способ сделать это.

        var dir = new ConsoleApplication5.Program();
        string path = "ftp://1.1.1.1/testsvr01/times/" + "testfile" + "/svr01fileName";
        string[] pathsplit = path.ToString().Split('/');
        string Firstpath = pathsplit[0] + "/" + pathsplit[1] + "/" + pathsplit[2] + "/" + pathsplit[3] + "/";
        string SecondPath = Firstpath + "/" + pathsplit[4] + "/";
        string ThirdPath = SecondPath + "/" + pathsplit[5] + "/";
        string[] paths = { Firstpath, SecondPath, ThirdPath };
        foreach (string pat in paths)
        {
           bool result= dir.EnsureDirectoryExists(pat);

            if (result==true)
            {
                //do nothing
            }
            else
            {   //create dir
                dir.createdir(pat);
            }
        }
        upload(path,filename);

    }
    private bool EnsureDirectoryExists(string pat)
    {

        try
        {
            //call the method the first path is exist ?
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(pat);
            request.Method = WebRequestMethods.Ftp.ListDirectory;
            request.Credentials = new NetworkCredential("sh", "se");
            using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
            {
                return true;
            }
        }
        catch (Exception ex)
        { return false; }

    }
    public void createdir(string pat)
    {
        try
        {
            FtpWebRequest createdir = (FtpWebRequest)FtpWebRequest.Create(new Uri(pat));
            createdir.Method = WebRequestMethods.Ftp.MakeDirectory;
            createdir.Credentials = new NetworkCredential("sh", "se");
            createdir.UsePassive = true;
            createdir.UseBinary = true;
            createdir.KeepAlive = false;
            FtpWebResponse response1 = (FtpWebResponse)createdir.GetResponse();
            Stream ftpStream1 = response1.GetResponseStream();
            ftpStream1.Close();
            response1.Close();
        }
        catch (Exception ex)
        {
        }

    }

Пожалуйста, если кто-нибудь из вас, ребята, найдет лучший способ, предложите мне.

1 Ответ

0 голосов
/ 10 марта 2012

Это большой код для обеспечения существования каталога.Есть ли метод Directory.Exists () (или подобный метод, который вы могли бы использовать)?Затем вы можете вызвать EnsureDirectoryExists () перед загрузкой.

private bool EnsureDirectoryExists(string path)
{
    // check if it exists
    if (Directory.Exists(path))
        return true;

    string parentPath = GetParentPath(path);
    if (parentPath == null)
        return false;

    bool result = EnsureDirectoryExists(parentPath);

    if (result)
    {
        CreateDirectory(path);
        return true;
    }

    return false;
}

Отказ от ответственности: Возможно, вам придется немного настроить логику и использовать функции FTP, но я надеюсь, что вы поняли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...