Dosya Tarama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
dkadir
Üye
Mesajlar: 40
Kayıt: 04 Oca 2014 06:44

Dosya Tarama

Mesaj gönderen dkadir »

Merhabalar
Aşağıda vereceğim fonksiyon çok güzel belirliten alanı belirtilen kritere göre listeliyor.İşine yarayan muhakkak olur diye ekliyorum.
Benim bu fonksiyona eklemek istediğim örneğin tüm exeleri taratıyorken boyutu 500 mb dan büyük olanları almamak yada boyuy 500 mb dan küçük olanları almak.
Bunun için nasıl birşey yapabiliriz ?
Güzel bir antivirüs yazmaya çalışıyorum , en azından şimdilik çalıştırılan program ne yapıyor nerelerden ne alıyor bunu yapıyorum

Kod: Tümünü seç

function DosyaListele(KlasorAdi:String;const Liste:TStrings;const Kriter:String='*.*'):Integer;
 procedure DosyaTara(const Yol:String);
 var Ara:TSearchRec;
 begin
   if FindFirst(Yol+Kriter,faAnyFile,Ara)=0 then repeat
     if Ara.Attr and faDirectory = 0 then
      Liste.Add(Yol+Ara.Name);
   until FindNext(Ara)<>0;
   FindClose(Ara);
   if FindFirst(Yol+'*.*',faDirectory,Ara)=0 then repeat //daha alt klasörleri tara
     if (Ara.Name<>'.') and (Ara.Name<>'..') and (Ara.Attr and faDirectory = faDirectory) then
      DosyaTara(Yol+Ara.Name+'\');
   until FindNext(Ara)<>0;
   FindClose(Ara);
 end;
begin
  Liste.Clear;
  if (KlasorAdi<>'') and (KlasorAdi[Length(KlasorAdi)]<>'\') then KlasorAdi:=KlasorAdi+'\';
  DosyaTara(KlasorAdi);
  Result:=Liste.Count;
end;
seci20

Re: Dosya Tarama

Mesaj gönderen seci20 »

Kod: Tümünü seç

  function FileSize(const aFilename: String): Int64;
  var
    info: TWin32FileAttributeData;
  begin
    result := -1;

    if NOT GetFileAttributesEx(PWideChar(aFileName), GetFileExInfoStandard, @info) then
      EXIT;

    result := Int64(info.nFileSizeLow) or Int64(info.nFileSizeHigh shl 32);
  end;
function DosyaListele(dosyaboyutu:integer;KlasorAdi:String;const Liste:TStrings;const Kriter:String='*.*'):Integer;
 procedure DosyaTara(const Yol:String);
 var Ara:TSearchRec;
 begin
   if FindFirst(Yol+Kriter,faAnyFile,Ara)=0 then repeat
     if Ara.Attr and faDirectory = 0 then
     if FileSize(Yol+Ara.Name)<dosyaboyutu then

      Liste.Add(Yol+Ara.Name);


   until FindNext(Ara)<>0;
   FindClose(Ara);
   if FindFirst(Yol+'*.*',faDirectory,Ara)=0 then repeat //daha alt klasörleri tara
     if (Ara.Name<>'.') and (Ara.Name<>'..') and (Ara.Attr and faDirectory = faDirectory) then
      DosyaTara(Yol+Ara.Name+'\');
   until FindNext(Ara)<>0;
   FindClose(Ara);
 end;
begin
  Liste.Clear;
  if (KlasorAdi<>'') and (KlasorAdi[Length(KlasorAdi)]<>'\') then
  KlasorAdi:=KlasorAdi+'\';
  DosyaTara(KlasorAdi);
  Result:=Liste.Count;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DosyaListele(5000,dosyayolu,memo1.Lines,'*.*');
end;

hocam şu şekilde byte cinsinden girerek listeleme yapabilirsiniz.
Cevapla