Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Dosya aramada hatam nerde
#1
Merhaba arkadaşlar.
Mp3 dosya aramakta kullandığım aşağıdaki gibi prosedürüm var. Edit1 içerisine isimini girdiğim mp3 dosyalarını, klasör ve alt klasörde arıyor.
Aramada alt klasörlerde arayı devre dışı bırakırsam arama gerçekleşiyor.
Alt dizinleri arama 
Mp3_Ara('F:\Müzikler', FMP3_ARA.Edit1.Text,'*.mp3', False );

Fakat alt dizinleri dahil edersem, yani sondaki değeri True yaparsam program kırılıyor.
Mp3_Ara('F:\Müzikler', FMP3_ARA.Edit1.Text,'*.mp3', True );

Arama kod bloğum şu şekilde

procedure Mp3_Ara(const Dosya_Yolu, Dosya_Adi,Dosya_Turu: string; const Alt_klasorde_ara: boolean  );
var
   Rec                  : TSearchRec;
   Path                 : string;
   Mp3_adi, yolu    : string;
begin

Path := IncludeTrailingBackslash(Dosya_Yolu);
if FindFirst(Path + Dosya_Adi+Dosya_Turu, faAnyFile - faDirectory, Rec) = 0 then
try
  repeat
      Mp3_adi:=Rec.Name;
       if Mp3_adi<>'' then begin
           yolu:=Path+Rec.Name;
           if pos('.mp3',Mp3_adi)>0 then System.Delete(Mp3_adi, Pos('.mp3', Mp3_adi) , Pos('.mp3', Mp3_adi) + Length('.mp3')-1 );
           FMP3_ARA.ListBox1.Items.AddObject(Mp3_adi , TMp3_Item.Create(yolu));
       end;

  until FindNext(Rec) <> 0;
finally
  FindClose(Rec);
end ;

If not Alt_klasorde_ara then Exit;

if FindFirst(Path +'*.*', faDirectory, Rec) = 0 then
try
  repeat
   if ((Rec.Attr and faDirectory) <> 0)  and (Rec.Name<>'.') and (Rec.Name<>'..') then
        Mp3_Ara(Path,Rec.Name, Dosya_Turu, True);  ///BURADA HATAM VAR AMA ÇÖZEMEDİM
  until FindNext(Rec) <> 0;
finally
  FindClose(Rec);
end ;

end;
Cevapla
#2
Aşağıdaki kısımdaki Path yerine Path + Rec.Name gibi bir şey yollaman lazım

if FindFirst(Path +'*.*', faDirectory, Rec) = 0 then
try
 repeat
  if ((Rec.Attr and faDirectory) <> 0)  and (Rec.Name<>'.') and (Rec.Name<>'..') then
       Mp3_Ara(Path,Rec.Name, Dosya_Turu, True);  ///BURADA HATAM VAR AMA ÇÖZEMEDİM
 until FindNext(Rec) <> 0;
finally
 FindClose(Rec);
end ;

Ayrıca System.IOUtils içindeki TDirectory class'ı altındaki GetFiles, GetDirectories motodlarını kullanmanı tavsiye ederim, kullanımı ve kodu daha temiz ve hoş diye düşünüyorum.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  UDL Dosya Oluşturma Bay_Y 6 255 01-08-2018, Saat: 13:24
Son Yorum: Bay_Y
  lnk dosya işleme silme haydarxxx 17 854 03-06-2018, Saat: 09:15
Son Yorum: haydarxxx
  Dosya veya klasorlere en son erisim zamanını ogrenme klavye 11 678 14-03-2018, Saat: 15:11
Son Yorum: klavye
  Dosya Taşıma dkadir 2 355 13-02-2018, Saat: 10:07
Son Yorum: Cyber
  Dosya İndirme yhackup 3 385 06-02-2018, Saat: 10:04
Son Yorum: yhackup



Konuyu Okuyanlar: 1 Ziyaretçi