Форум: "Сети";
Текущий архив: 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