Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2011, 15:41   #1
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию Работа с idFTP

Моя задача: написать процедуру загрузки файлов из FTP в TreeView. Просто названия файлов, никакого редактирования или открытия. Т.е. примерная структура должна выглядеть так:
Цитата:
1. Название хоста сервера
- Дочерняя папка №1
--- Папка, расположенная в дочерней папке №1
------ Соб-сно дочерний файл второго порядка
--- Файл, расположенный в дочерней папке
--- Еще один файл
- Дочерняя папка № 2
Но алгоритм таков, что в начале в древо добавляется название самого хоста фтп, при двойном клике на хосте происходит следующая процедура:
Код:
procedure Tmainform.VSTUpdateFTP(Node:PVirtualNode);
var data,cd,r:pnodedata; list:TStringList; n,p:pvirtualnode; i:integer; text,root:string;
begin
data:=vst.getNodeData(Node);
//vst.DeleteChildren(node,True);
    list:=TStringList.Create;
    idftp.Host:=data.Path;
    idftp.Username:=data.FTPUsername;
    idftp.Password:=data.FTPPassword;
 try
    idftp.Connect;
    if idftp.Connected then
    begin
    idftp.List(list,'/',False);

    for i:=0 to list.Count-1 do
    begin
      text:=copy(list.Strings[i],2,length(list.Strings[i]));
      if (text<>'.') and (text<>'..') then
      begin
      n:=vst.AddChild(node);
      cd:=vst.GetNodeData(n);
      cd.Text:=text;
      cd.Path:='ftp://'+StringReplace(data.Path+'/'+list.strings[i],'//','/',[rfReplaceAll])+'/';
      cd.NType:=ntFTP;
      cd.FTPUsername:=idftp.Username;
      cd.FTPPassword:=idftp.Password;
      end;
    end;

    end else ShowMessage('Unable to connect server');
    list.Free;
  finally idftp.Disconnect;
  end;
end;
cd - тип даты для узлов в VirtualTreeView. Содержит вышеуказанные параметры.
Т.е. каждый последующий двойной клик по дочерним элементам древа подгружает их содержимое через idFTP.

Проблема: я могу получить папки первого уровня, но при UpdateFTP их адреса вылетает ошибка сокета #11004 (неправильный хост, если не ошибаюсь). При этом получаю сам хост вручную и ввожу в строку Проводника - Ошибка файловой системы. Тот хост, что копирую я и тот, что открывает проводник при последовательных переходах абсолютно идентичны. Почему ошибка?
То ли сбой где-то в алгоритме идет (конкретно тут):
Код:
cd.Path:='ftp://'+StringReplace(data.Path+'/'+list.strings[i],'//','/',[rfReplaceAll])+'/';
Укажите, пожалуйста, на ошибку.

Последний раз редактировалось kettanaito; 27.10.2011 в 17:40.
kettanaito вне форума Ответить с цитированием
Старый 30.10.2011, 23:18   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

в run-time смотрите какое значение имеет каждая ветвь. И сами определите правильно оно или нет. Может список каталогов не верный.
Человек_Борща вне форума Ответить с цитированием
Старый 31.10.2011, 22:30   #3
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

Человек_Борща, в том и дело, что список каталогов верный, атрибуты (т.е. хост, имя пользователя и пароль) тоже передаются правильно. Отсутствует соединение в idFTP, т.к. "Хост указан неверно". Я беру и вручную копирую хост, который должна открыть программа, пытаюсь открыть через Проводник. Получаю ошибку "Ошибка файловой системы". Перехожу на этот адрес автоматически (сначала открыв общий фтп, а далее последовательные переходы "вглубь"), то все работает. При этом строки адресов (тот адрес, что я вижу в Проводнике и тот, что генерирует моя программа) идентичны.
kettanaito вне форума Ответить с цитированием
Старый 01.11.2011, 06:42   #4
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

фтп составной.
Вам нужно войти в корень фтп и "вручную" подняться в нужную директорию.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 01.11.2011, 20:34   #5
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

Johnson, думаю сработает, но не подскажите как это примерно реализуется? За путь в фтп, кроме значения хоста, разве еще что-то отвечает?

В любом случае спасибо за ответ, на мысль навел.
kettanaito вне форума Ответить с цитированием
Старый 22.12.2011, 17:12   #6
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

Цитата:
Вам нужно войти в корень фтп и "вручную" подняться в нужную директорию
Господа, подскажите пожалуйста, как все-же "вручную" спуститься или подняться к нужному пути используя FTP?

У меня есть путь материнского узла - допустим ftp.server.com. При двойном клике по нему в него добавляются дочерние узлы с именами папок, которые содержит этот адрес. Кликнули, добавились узлы html_public, backup. Теперь DblClick на первом добавившимся узле - при клике в него должны добавиться папки и файлы, которые хранятся по пути материнский_путь+дочерний_путь, т.е. путь: ftp.server.com/html_public/. Но я получаю ошибку SocketError #110044.\

Добавлено:
Моя предыдущая ошибка была в том, что я пытался сложить Host путем Материнский_хост+дочерний_хост, а ведь значение хоста одно для всех элементов. Но по какому параметру тогда смещать директорию? Если хост у всех узлов один то узлы грузят сами себя, как перейти именно на нужный каталог?

Последний раз редактировалось kettanaito; 22.12.2011 в 17:41.
kettanaito вне форума Ответить с цитированием
Старый 24.12.2011, 21:54   #7
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

Добавлено:
Проблему решил, из корня в существующие папки переходить через ChangeDir не учитывая имя хоста.
kettanaito вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приручение idFTP.get AnKor94 Общие вопросы Delphi 7 01.12.2014 10:34
Компонент IdFTP 6epreu Работа с сетью в Delphi 2 22.09.2011 15:31
IdFTP ошибка Florento Работа с сетью в Delphi 2 05.02.2011 15:01
idFTP и TreeView vitawt Работа с сетью в Delphi 3 21.02.2009 02:04
Проблема с IDFTP esy Работа с сетью в Delphi 4 04.12.2008 18:22