Пробема с кодировкой BytesRoad.Net.Ftp в методе ChangeDirectory()
При выполнении метода ChangeDirectory()
класса FtpClient
(пространство имён bytesroad.net.ftp.dll
и одноимённая библиотека) появляется ошибка
Operation Failed
если в названии целевого каталога присутствует кириллица.
Работаю в SharpDevelop 4.3. Примечательно то, что при компиляции и запуске с подключенным отладчиком с конфигурацией Debug в OS Windows XP выполнение метода не вызывает исключения, а при установленной конфигурации Release исключение вызывается, однако в OS Windows 7 x64 исключение вызывается на обоих конфигурациях.
Как избавиться от этой ошибки?
Вот такая вот функция для наглядности:
bool CheckAndDownloadNewFiles()
{
bool succ = true;
bool connectSucc = false;
try
{
ftp.PassiveMode = conf.PassiveMode;
Log.WriteToLog("Подключение к серверу "+conf.FtpHost);
ftp.Connect(conf.Timeout,conf.FtpHost,conf.Port);
Log.WriteToLog("Вход на сервер "+conf.FtpHost+" под именем "+conf.Useername);
ftp.Login(conf.Timeout,conf.Useername, conf.Password);
Log.WriteToLog("Установка рабочего каталога: "+conf.WorkDir);
ftp.ChangeDirectory(conf.Timeout,conf.WorkDir);
connectSucc = true;
Log.WriteToLog("Проверка наличия и закачка новых файлов обновлений с FTP сервера");
} catch (Exception e) {
Log.WriteToLog(e.Message);
connectSucc = false;
} finally {
if (ftp.IsConnected && connectSucc)
{
FtpItem[] ftpItems = ftp.GetDirectoryList(conf.Timeout);
downloadedFiles.Clear();
if (ftpItems.Length > 0)
{
foreach (FtpItem item in ftpItems)
{
if (!filesList.FindFile(item.Name))
{
Log.WriteToLog("Закачка файла "+item.Name);
try
{
if (item.ItemType == FtpItemType.File && Path.GetExtension(item.Name) == ".zip")
ftp.GetFile(conf.Timeout,conf.TempUpdateDir+Path.DirectorySeparatorChar+item.Name,item.Name);
downloadedFiles.Add(conf.TempUpdateDir+Path.DirectorySeparatorChar+item.Name);
succ = true;
} catch {
Log.WriteToLog("Не удалось скачать файл "+item.Name);
succ = false;
} finally {
if (succ)
{
filesList.AddFile(item.Name);
}
}
} else {
Log.WriteToLog("Файл "+item.Name+" уже скачивался ранее");
}
}
}
else {
Log.WriteToLog("Сервер пуст");
}
ftp.Disconnect(conf.Timeout);
}
}
return false;
}
Источник: Stack Overflow на русском