TNMFTP,changedir, onlistitem

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

TNMFTP,changedir, onlistitem

Mesaj gönderen aslangeri »

s.a.
arkadaşlar, TnmFTP bileşenini kullanarak ftp ye dosya transferi yapmak istiyorum, yapıyorumda. Yalnız dosyaları ftp de dosyaları farklı klasörlere atıyorum. o yüzden önce ilgili klasörün olup olmadığını kontrol etmek lazım. Onu kontrol edip varsa klasörü değiştiriyorum sonra o klasöre dosyayı gönderiyorum.
Buraya kadar her şey ok. Ancak peşpeşe bir kaç dosya gönderdiğim zaman program takılıyor. log tutturdum.
Program aşağıdaki unitteki prosedürlerden birinde takılıyor. procedurü aşağıda belirttim.
1.Neden böyle bir şey (takılma)yapıyor olabilir.
2.Dosya transfer etmek için aktif klasörü değiştirmem şart mı?
3.Başka nasıl bir yöntem önerirsiniz.

Kod: Tümünü seç

unit UFtpUtils;

interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Psock, NMFtp;
  Function ChangeFtpDir(inftp:TNMFTP; TargetDir:string):Boolean;
implementation

uses ULogs;

Type
  TF1 = class
     dirlist:Tstrings;
     procedure InFtpListItem(Listing: String);
  end;
  //direk procedure olarak yazınca 
  //inftp nin onlistitem olayına atıyamadım ondan sebeb clas yaptım.
  //NOT: ilk clasım ona göre
var
tempf:TF1;
procedure TF1.InFtpListItem(Listing: String);
var
temp:string;
    Function siradakiniver():string;
    var
    b:integeR;
    Begin
      b:=pos(' ',temp);
      result:=copy(temp,1,b);
      Delete(temp,1,b);
      temp:=TrimLeft(temp);
    End;
begin
  temp:=listing;
  if (pos('d',siradakiniver)>0)then
  begin
    siradakiniver;
    siradakiniver;
    siradakiniver;
    siradakiniver;
    siradakiniver;
    siradakiniver;
    siradakiniver;
    dirlist.Add(temp);
    //logekle('dizin adı > '+temp);
    //bu proc. de takılıyor ama herzaman değil.
   //sanırım sonsuz bir döngüye giriyor yada öle bişeyler oluyor hata vermiyor.
  end;
end;

Function ChangeFtpDir(inftp:TNMFTP; TargetDir:string):Boolean;
var
oldevent:TNMListItem;
Begin
  //Logekle(targetdir +' a bakıyoruz');
  if tempf=nil then tempf:=tf1.create;
  tempf.dirlist:=TStringList.Create;
  oldevent:=inftp.OnListItem;
  inftp.OnListItem:=tempf.InFtpListItem;
  inftp.List;
  if tempf.dirlist.IndexOf(targetdir)>0 then
  begin
    //logekle('gidiyoruz');
    inftp.ChangeDir(targetdir);
    result:=true;
  end else
  Begin
    //logekle('oluşturuyoruz');
    inftp.MakeDirectory(targetdir);
    //logekle('gidiyoruz');
    inftp.ChangeDir(targetdir);
    result:=true;
  end;
  //logekle('olaylist boşaltılıyor');
  inftp.OnListItem:=oldevent;
  //freeandnil(tempf.dirlist);
  freeandnil(tempf);
End;
end.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla