Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];

Вниз

NMFTP + Nlist = Range check error   Найти похожие ветки 

 
Pavelkq   (2005-04-28 10:40) [0]

Здоавствуйте! Пишу ФТП-клиент для синхронизации локальной папки с сервером. Применил NMFTP. Код такой:

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
   TSL: TStringList;
begin
 if NMFTP1.Connected then
    NMFTP1.Disconnect
 else
 begin
   NMFTP1.Vendor := NMOS_AUTO;
   NMFTP1.Host:="hostname";
   NMFTP1.Port:=21;
   NMFTP1.TimeOut:=50000;
   NMFTP1.UserID:="username";
   NMFTP1.Password:="pass";
   NMFTP1.Connect;
   NMFTP1.ChangeDir("mydir");
 end;
 Memo2.Lines.Add("Соединились");

 iii:=0; // - это тип Интегер
 iiiTSL:=TStringList.Create;// - это TStringList
//Завел эту бадягу чисто для отладки. С ними список файлов на ФТП получается правильный, а без них почему-то в 8 раз меньше.

 TSL:=TStringList.Create;// - сюда попадает список файлов на ФТП
 Temp:="";// Тип Стринг
 GetList;

 ShowMessage(IntToStr(iii)+"  "+IntToStr(iiiTSL.Count-1));
//  Проверяю совпадение количества файлов.

 TSL.Text:=copy(Temp,2,Length(Temp)-1);
 TSL.Sorted:=true; // сортирую для дальнейшей обработки
 For i:=0 to TSL.Count-1 do
   Memo4.Lines.Add(TSL[i]);// вывожу
 Memo4.Lines.Add(IntToStr(TSL.Count-1));// Тут же снова количество для отладки
 // Дальше будет сравнение с локальным списком файлов.

end;

Procedure GetList();
begin
 With Form1 do
 begin
   Timer1.Enabled:=true;// - включаю таймер, чтобы не зависло соединение. Может это и лишнее
   Memo2.Lines.Add("Получаю список файлов");
   Edit1.Visible:=True; // Тут отобразится процесс получения списка файлов
   NMFTP1.NList;// Вот тут иногда вылетает та самая ошибка.
   Edit1.Visible:=False;
   Memo2.Lines.Add("Получен каталог "+Form1.NMFTP1.CurrentDir);
 end;
end;

procedure TForm1.NMFTP1ListItem(Listing: String);
begin
 Temp:=Temp+#13+Listing; // Собитаю список файлов для передачи в TStringList
 Edit1.Text:=IntToStr(Length(Temp));// отображение процесса получения. Может можно по другому?
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Timer1.Interval:=60000;
 if NMFTP1.Connected then
   NMFTP1.Disconnect;
 Memo2.Lines.add("Таймер отключил");
end;


 Так вот, иногда что-то не срабатывает и после команды NList вылетает ошибка Range Check Error. Может с таймером что-то напортачил?


 
Cobalt ©   (2005-04-28 13:15) [1]

if NMFTP1.Connected then
   NMFTP1.Disconnect
else
begin
<skip>
  NMFTP1.Connect;
  NMFTP1.ChangeDir("mydir");
end;
Memo2.Lines.Add("Соединились");

if NMFTP1.Connected, то действие
Memo2.Lines.Add("Соединились"); будет неверным.

Это для начала.


 
Pavelkq   (2005-04-28 13:58) [2]

Разобрался с таймером. Получается эта фишка не то, чтобы не помогает, а наоборот, все портит. Убрал полностью таймер. Все пошло лучше. Но теперь вижу, что список файлов на FTP не всегда одинаковый. При общем количестве 829 файлов в списке оказывается от 828 до 832 файлов. При этом я переписал обработку получения списка файлов:

procedure TForm1.NMFTP1ListItem(Listing: String);
begin
 TSL.Add(Listing);
 Edit1.Text:=IntToStr(TSL.Count);
end;

В списке появляются остатки расширения файлов (rar, ar).


 
Pavelkq   (2005-04-28 14:08) [3]

[1] Что Вы имеете в виду? У меня же if NMFTP1.Connected, то действие Дисконект. А только после условия идет вывод информации о соединении. В принципе, вполне возможно, что это лишнее. Но я взял из дельфийской справки.


 
Alexander Panov ©   (2005-04-29 15:08) [4]

Ты неправильно понимаешь работу подобных компонентов.
Они используют при работе событийную модель.
Разберись вот с этим примером, и тебе будет понятно, как работать с подобными компонентами.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Psock, NMFtp;

type
 TForm1 = class(TForm)
   NF: TNMFTP;
   Button1: TButton;
   me: TMemo;
   procedure NFConnect(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure NFListItem(Listing: String);
   procedure NFSuccess(Trans_Type: TCmdType);
 private
   { Private declarations }
 public
   procedure Display(const s: String);
   { Public declarations }
 end;

var
 Form1: TForm1;
 FtpList: TStringList;

implementation

{$R *.dfm}

procedure TForm1.NFConnect(Sender: TObject);
begin
 NF.ChangeDir("pub");
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 NF.Host := "host";
 NF.Port := 21;
 NF.UserID := "Anonymous";
 NF.Password := "anonymous@mail.ru";
 me.Lines.Clear;
 NF.Connect;
end;

procedure TForm1.Display(const s: String);
begin
 me.Lines.Add(s);
end;

procedure TForm1.NFListItem(Listing: String);
begin
 Display(Listing);
end;

procedure TForm1.NFSuccess(Trans_Type: TCmdType);
begin
 case Trans_Type of
   cmdChangeDir:
     begin
       FtpList := TStringList.Create;
       NF.Nlist;
     end;
   cmdNList:
     begin
       me.Lines.AddStrings(FtpList);
       FtpList.Free;
       NF.Disconnect;
     end;
 end;
end;

end.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.033 c
1-1121633515
cranium
2005-07-18 00:51
2005.08.07
Bitmap, DLL и ресурсы


4-1118096374
Gopher
2005-06-07 02:19
2005.08.07
команда GetWindowsDir


1-1121531102
Defunct
2005-07-16 20:25
2005.08.07
AV при создании формы-фрейма


3-1119934973
evg00
2005-06-28 09:02
2005.08.07
Проблема с общим доступом к базе


1-1121511757
Kreyl
2005-07-16 15:02
2005.08.07
Access Violation при использовании DATA MODULE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский