Главная страница
    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.46 MB
Время: 0.039 c
4-1117472658
duk_
2005-05-30 21:04
2005.08.07
температура скорость


14-1121526833
Kerk
2005-07-16 19:13
2005.08.07
Почему при использовании файрвола...


3-1120021017
Jonny210
2005-06-29 08:56
2005.08.07
Ошибка при добавлении/редактировании записи


5-1092211388
segor
2004-08-11 12:03
2005.08.07
События свойства компонента


1-1121867379
Dust
2005-07-20 17:49
2005.08.07
Опять вопрос про качественный код:





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский