Создайте папку с помощью FtpWebReqest без использования 2 запросов или управления потоком исключений - PullRequest
0 голосов
/ 16 августа 2011

У меня есть эта функция для создания каталога на удаленном сервере с использованием ftp, однако я вижу только два способа сделать это: либо выполнить два FtpWebRequests (один, чтобы проверить, выходит ли из каталога dir, чтобы создать его), либо поймать исключение при сбое создания.

var address = new Uri(String.Format("ftp://{0}/{1}/{2}",
    Properties.Settings.Default.Address, 
    arg.RemoteServer.Replace('\\', '_'), 
    ClinicFolder(arg))); //ClinicFolder(arg) is the directory that may or may not exists.
FtpWebRequest request;
request = (FtpWebRequest)FtpWebRequest.Create(address);
request.Credentials = MyCreds
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = keepAlive;
request.Proxy = null;
request.Method = WebRequestMethods.Ftp.MakeDirectory;
try
{
    request.GetResponse();
}
catch (WebException e)
{
    if (e.Message != "The remote server returned an error: (550) File unavailable (e.g., file not found, no access).")
        throw;
}

Мне хочется принимать душ, когда бы я ни посмотрел на то, что я написал, но потребовалось бы намного больше кода, чтобы составить список dir и проанализировать его (и я думаю, что больше времени, но я не профилировал).

Является ли это редким случаем, когда управление потоком исключений является лучшим вариантом?

1 Ответ

1 голос
/ 16 августа 2011

Вы должны поймать это исключение, так как другой пользователь FTP может создать каталог между вашей проверкой и попыткой создать.

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

...