Консультация № 109207
13.11.2007, 13:19
0.00 руб.
0 1 1
Добрый день уважаемые эксперты! У меня возникла необходимость написать прогу которая должна дозваниваться по определённому номеру телефона, или по созданому в системе соединению (подключение к сети на рабочем месте), подключаться к FTP-серверу и из одной папки загружать на мой комп имеющиеся там файлы, после загрузки удалять файлы с FTP, а в другую папку отправлять файлы с моего компа. Подскажите как все это можно реализовать (желательно с примерами), или дайте ссылки на ресурсы в сети по данной проблеме. Желательно подробные ответы, потому что я в основном пишу проги для роботы с базами.

Обсуждение

Неизвестный
13.11.2007, 13:54
общий
это ответ
Здравствуйте, Кисель Вадим!
Наведу пример работы с FTP-серверами. Можно создать клиент на базе компонента IdFTP с закладки Indy Clients.

IdFTP.UserName := ‘Пользователь‘;
IdFTP.Password := ‘Пароль‘;
IdFTP.Host := ‘127.0.0.1‘;
try
IdFTP.Connect();
except
Application.MessageBox(PChar(‘Ошибка подключения‘, ‘Вот!‘, MB_ICONSTOP);
exit;
end;

try
//переходим в нужн. каталог на сервере
IdFTP.ChangeDir(‘Dir‘);
except
Application.MessageBox(PChar(‘Не могу перейти‘, ‘Вот!‘, MB_ICONSTOP);
exit;

//а вот и сама передача файла
IdFTP.Put(Исходящий_файл, ‘Файл_на_сервере‘);
end;

Для удаления файла служит метод .Delete(FileName:Tstring). Ну и не забыть отключится методом .Disconnect. В приложении работающая консольная программа для передачи файлов по FTP-протоколу на сервер, параметры подключения читаются с ini-файла.
Удачи.

Приложение:
Файл CopyFtp.dpr:program CopyFtp;{$APPTYPE CONSOLE}uses SysUtils, IdFTP, IniFiles;{===============================================================================}function LoadFromIni(key: string; Section: string = ‘MainOptions‘): string;//Читає значення з .ini-файлаvar IniFile: TIniFile; res: string;begin res := ‘‘; try IniFile := TIniFile.Create(copy(ParamStr(0), 1, pos(‘.‘, ParamStr(0)) - 1) + ‘.ini‘); res := IniFile.ReadString(Section, Key, ‘‘); finally IniFile.Free; result := res; end;end;{===============================================================================}procedure Log(vText: string);var FileHandle: integer; fFileName: string; fFileOut: TextFile;begin fFileName := copy(ParamStr(0), 1, pos(‘.‘, ParamStr(0)) - 1) + ‘.log‘; if not FileExists(FFileName) then begin FileHandle := FileCreate(FFileName); FileClose(FileHandle); end; try AssignFile(FFileOut, FFileName); Append(FFileOut); WriteLn(FFileOut, FormatDateTime(‘YYYY.MM.DD hh:mm:ss - ‘, now) + vText); Flush(FFileOut); finally CloseFile(FFileOut); end;end;{===============================================================================}var vFtp: TidFTP; vFile, vPwd: string; i: byte;begin Log(‘Початок роботи‘); vFtp := TidFTP.Create(nil); vFile := ParamStr(1); if not FileExists(vFile) then begin Log(‘Файл "‘ + vFile + ‘" не існує‘); exit; end; vFile := ExtractFileName(vFile); vFtp.Username := LoadFromIni(‘User‘); vPwd := LoadFromIni(‘Password‘); //пароль читається з ini-файлу і код кожного символу збільшується на 1 //тобто, для отримання правиьного for i := 1 to Length(vPwd) do begin vPwd[i] := chr(ord(vPwd[i]) + 1); end; vFtp.Password := vPwd; vFtp.Host := LoadFromIni(‘Host‘); try vFtp.Connect(); except Log(‘Не можливо під‘‘єднатися до ‘ + vFtp.Host); exit; end; try vFtp.ChangeDir(LoadFromIni(‘Dir‘)); except Log(‘Не можливо перейти в каталог ‘ + LoadFromIni(‘Dir‘)); exit; end; try //Йде передавання файла на сервер Write(‘‰¤Ґ ЇҐаҐ¤ ў ­­п д ©«  "‘ + vFile + ‘" ­  бҐаўҐа ‘ + vFtp.Host); vFtp.Put(ParamStr(1), vFile); Log(‘Файл "‘ + vFile + ‘" вдало передано‘); except Log(‘Помилка передачі файла "‘ + vFile + ‘"‘); end; {===============================================================================}end.Файл CopyFtp.ini[MainOptions]User = AdminPassword = 16361674Host = 192.168.60.24Dir = d\Arch\Doc\
Форма ответа