Время ожидания вывода списка каталогов ftp. Огромное количество подкаталогов

Есть ли способ справиться с ситуацией, когда вам нужно получить список всех каталогов на FTP-сервере, где количество каталогов настолько велико, что его получение занимает слишком много времени, а операция завершается ошибкой из-за тайм-аута?

Интересно, есть ли какие-нибудь библиотеки, которые позволяют как-то это делать?


person iLemming    schedule 10.02.2012    source источник
comment
Можете ли вы ограничить данные, т.е. найти только первые 5 уровней и выполнить методологию LOD?   -  person Brad Semrad    schedule 10.02.2012
comment
вы можете получить это по частям? Скажем, все папки, начинающиеся с «a», затем еще один запрос для тех, которые начинаются с «b» и т. Д. Возможно, вы также можете разделить запрос другими способами (например, по дате)   -  person Adrian    schedule 10.02.2012
comment
Ключ - ListDirectory. Я опубликовал ниже пример того, как вы можете это сделать. Спасибо, с пятницей.   -  person MethodMan    schedule 10.02.2012


Ответы (1)


Попробуйте что-нибудь вроде этого

        FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(uri);
        ftpRequest.Credentials = new NetworkCredential("anonymous","[email protected]");//replace with your Creds
        ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
        FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
        StreamReader streamReader = new StreamReader(response.GetResponseStream());

        List<string> directories = new List<string>();

        string line = streamReader.ReadLine();
        while (!string.IsNullOrEmpty(line))
        {
            directories.Add(line);
            line = streamReader.ReadLine();
        }

        streamReader.Close();

        // also add some code that will Dispose of the StreamReader object
        // something like ((IDisposable)streanReader).Dispose();
        // Dispose of the List<string> as well 
           line = null;
person MethodMan    schedule 10.02.2012
comment
он застревает на (FtpWebResponse) ftpRequest.GetResponse () - person iLemming; 10.02.2012
comment
что вы имеете в виду, когда говорите, что он застрял ... пожалуйста, предоставьте дополнительную информацию, а также можете ли вы обернуть свой код вокруг Try Catch .. - person MethodMan; 10.02.2012
comment
хорошо, если у вас есть много каталогов для цикла, это может быть нормально ... также трудно сказать, не зная, какой у вас тип сети / подключения ... может быть так много возможностей ... но тот факт, что код работает, плюс.. - person MethodMan; 10.02.2012
comment
позвольте нам продолжить это обсуждение в чате - person MethodMan; 10.02.2012
comment
вы можете изменить код, чтобы он выглядел как-то здесь, но он очень похож на то, что есть у меня, с той лишь разницей, что в этом коде, расположенном здесь, является While! EndOfStream ... sharpertutorials.com/ultimate-guide-ftp просмотреть полный пример кода .. только вы сможете определить, можете ли вы использовать его функции или нет .. позвольте я знаю - person MethodMan; 10.02.2012
comment
еще лучше .. вот пример из MSDN, где вы можете сделать это Async msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.aspx Я действительно хотел бы помочь вам решить эту проблему. У меня никогда не было этой проблемы из-за структуры каталогов, в которой я нахожусь не такой уж большой .. - person MethodMan; 10.02.2012