2011-01-31 4 views
3

Я использовал класс для всех моих FTP-передач, которые отлично работают в C# 3.5, но так как я обновился до фреймворка 4, у меня есть некоторые проблемы.C# 4: проверьте, существует ли каталог FTP

Я ищу в Google, но не найду решений.

Особенно с методом, чтобы проверить, если каталог существует:

public bool DirectoryExists(string directory) 
{ 
    bool directoryExists = false; 
    if (directory.Substring(0, 1) != "/") 
    directory = "/" + directory; 
    FtpWebRequest request = GetFtpWebRequest(host + directory, WebRequestMethods.Ftp.PrintWorkingDirectory); 
    try 
    { 
    using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) 
    { 
     directoryExists = true; 
    } 
    } 
    catch (WebException) 
    { 
    directoryExists = false; 
    } 
    return directoryExists; 
} 

private FtpWebRequest GetFtpWebRequest(string url, string method) 
{ 
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url); 
    request.UseBinary = true; 
    request.KeepAlive = true; 
    request.UsePassive = (mode == Modes.Passive); 
    request.Timeout = Timeout.Infinite; 
    request.ServicePoint.ConnectionLimit = 6; 
    request.ReadWriteTimeout = Timeout.Infinite; 
    if (credential == null) 
    credential = new NetworkCredential(login, password); 
    request.Credentials = credential; 
    request.Method = method; 
    return request; 
} 

Метод DirectoryExists всегда возвращает истину (даже каталог не существует), но только на каркасе 4, перед тем, как было сгенерировано исключение по GetFtpWebRequest если каталог не существует.

У кого-нибудь была эта проблема?

Пожалуйста, не говорите мне, чтобы использовать другую библиотеку вызывать все мои программы зависят от этого, и я не хочу, чтобы обновить все ...

+1

Вы пытались проверить содержимое ответа перед возвратом TRUE; –

+1

Вы обновили свой проект до .NET 4.0? Если да, убедитесь, что вы используете .NET 4.0 Framework, а не .NET 4.0 Client Profile в свойствах проекта. Это зафиксировало около 75% всех проблем совместимости, с которыми я столкнулся. – Weegee

+0

Да, я обновляю проект до «.NET framework 4». Если я использую «.NET framework 3.5», все в порядке. В «.NET framework 4» ответ StatusCode всегда «PathnameCreated», если каталог существует или нет ... –

ответ

2

Просто измените:

WebRequestMethods.Ftp. PrintWorkingDirectory

к ...

WebRequestMethods.Ftp.ListDirectory

и ваш код будет работать точно в .NET 4.0.

+0

Да, это то, что я сделал. Но это займет около 20 раз больше, чтобы сделать этот тест, и это настоящая проблема для моих FTP-приложений ... –

Смежные вопросы