![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите пожалуйста почему выдается ошибка в TidFTP? [D7, WinXP]
TankMan © (2007-11-08 01:54:00)Не могу понять в чем загвоздка. Суть программы такова, чтобы копировать список файлов указанных в Memo в директорию указанную в ePathtoCopy. Директории может и не быть, поэтому если что мне нужно ее создать. Вот и написал такую маленькую функцию CahngeFullDir. Все вроде бы нормально, исполняется и выполняется, но только один раз после запуска приложения. Когда я нажимаю второй раз на эту же кнопу, то в строчке "Вот здесь" , выдается ошибка причем почему-то разные ошибки то Acces violation at adress xxxxx то EPrivelege и что-то по поводу привелегий (сейчас уже не могу добиться ее отображения)
одно меня мучает, не могу понять, я ведь не зря уже разделил целевую строчку директории на две, в два захода чтобы дошло до нужно директории, а он проходит первое использование CahngeFullDir (полностью) и при втором заходе выдает ошибку на той строчке после 1го прохода ее рекурсивно.... и даже после этой ошибки, я еще раз нажимаю кнопку и опять повторяется тоже самое - первый раз CahngeFullDir проходит нормально а второй раз нет :(
Не могу понять... в чем же может быть дело подскажете?
procedure TForm1.btnConnectClick(Sender: TObject);
var
i:integer;
procedure CahngeFullDir(Dest:string);
var str1:TStrings;
i:integer;
s:string;
begin
str1:=TStringList.Create;
if str1=nil then ShowMessage('НЕ создан str1');
Dest:=RightStr(Dest,length(Dest)-1);
i:=AnsiPos('/',Dest);
if i>0 then begin
s:=LeftStr(Dest,i-1);
Dest:=RightStr(Dest,Length(Dest)-i);
idportal.List(str1,'*',false) <================== "Вот здесь"
if str1.IndexOf(s)>=0 then else
idportal.MakeDir(s);
idportal.ChangeDir(s);
i:=AnsiPos('/',Dest);
if i>0 then CahngeFullDir('/'+Dest)
else if length(Dest)>1 then
CahngeFullDir('/'+Dest+'/');
//idportal.List(nil);
end;
str1.Free;
end;
procedure PutFile(FileName:string);
begin
idportal.TransferMode(dmStream);
try
FStream:=TFileStream.Create(FileName,fmOpenRead or fmShareExclusive);
idportal.Put(FStream,ExtractFileName(FileName));
finally
FStream.Free;
end;
end;
begin
if Assigned(idportal) then begin
idportal.Free;
idportal:=TIdFTP.Create(nil);
idportal.OnWork:=Form1.idportalWork;
end;
If idportal.Connected then
Begin
idportal.Abort;
idportal.Quit;
End;
idportal.Host:='192.168.0.130';
idportal.Username:='httpadmin';
idportal.Password:='12345678';
idportal.ProxySettings.Host:='';
idportal.ProxySettings.Port:=0;
idportal.Passive := false;
idportal.Connect;
If idportal.Connected then
Begin
idportal.ChangeDir('/');
CahngeFullDir('/var/www/html');
CahngeFullDir(ePathtoCopy.Text);
for i:=0 to Memo1.Lines.Count-1 do
if FileExists(Memo1.Lines[i]) then
PutFile(Memo1.Lines[i]);
idportal.Abort;
idportal.Quit;
ShowMessage('Передача данных закончилась');
End;
If idportal.Connected then
Begin
idportal.Abort;
idportal.Quit;
End;
end;
Anatoly Podgoretsky (2007-11-08 15:53:00) [1]Это адрес xxxxx
Сергей М. (2007-11-08 13:22:00) [2]
> почему idportal.List(str1,'*',false) возвращает ошибку
Потому что - ты же сам сказал - Acces violation at adress xxxxx
Выделенное жирным весьмаинформативно для поиска причины.
TankMan (2007-11-08 12:10:00) [3]Да это и не важно - это мусор, я уже не знал что делать. сдесь вообще мусора достаточно, но тем не менее не понятно почему idportal.List(str1,'*',false) возвращает ошибку :(
Сергей М. (2007-11-08 09:48:00) [4]
> if str1=nil then ShowMessage('НЕ создан str1');
Начнем с того, что это сообщение ты никогда не увидишь.