Пробема с кодировкой BytesRoad.Net.Ftp в методе ChangeDirectory()

Рейтинг: 1Ответов: 0Опубликовано: 22.12.2014

При выполнении метода 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;
        }

Ответы

Ответов пока нет.