Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Dosya Bulma (Algoritmik Soru Serisi)
#28
Cevapların bir çoğu verilen dizin içerisinde genel bir arama, Benim kullandığım yöntem içten dışa arama önce kendi dizini sonra bir üst path'e çıkarak oradaki klasörler bulamaz ise bir üst path'e çıkarak arama.

Bu şekilde istediğim dosyayı 2 üst path'te bulması 00:00:00:009 ms sürüyor,  System.IOUtils teki TDirectory sınıfı bu için biçilmiş kaftan.
açıklayıcı yazmaya çalıştım cevap veren herkese teşekkürler.

unit Ufindfiles;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
 System.Classes, Vcl.Graphics, System.Diagnostics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Button1: TButton;
   Memo1: TMemo;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

uses
 System.Types, System.IOUtils;

{$R *.dfm}

function Findfiles(FName: String): String;
 function Findfile(FFolder, FName: String): String;
 var
   i: integer;
   Files: TStringDynArray;
 begin
   (*
     GetFiles klasör içerisindeki dosyaların adlarını,
     path ile birlikte dönüyor
     'D:\Gunes\Kasım\07\OPS_GUNES_KASKO_REQUEST_EPID1453.xml'
   *)
   Files := TDirectory.GetFiles(FFolder);
   for I := Low(Files) to High(Files) do
     if ExtractFileName(Files[i]) = FName then
       exit(Files[i])
 end; // function Findfile

var
 i, a: integer;
 Directories, Directories2: TStringDynArray;
 FolderParent, MFolder, MFName: String;
begin
 (*
   D:\Gunes\Kasım\07\OPS_GUNES_KASKO_REQUEST_EPID1453.xml
   To
   D:\Gunes\Kasım\07
 *)
 MFolder := ExtractFileDir(FName);

 (*
   D:\Gunes\Kasım\07\OPS_GUNES_KASKO_REQUEST_EPID1453.xml
   To
   OPS_GUNES_KASKO_REQUEST_EPID1453.xml
 *)
 MFName := ExtractFileName(FName);

 (*
   D:\Gunes\Kasım\07 dizininde arıyor.
 *)
 result := Findfile(MFolder, MFName);
 if result <> '' then
   exit;

 (*
   Bir Üst Path'deki klasörler taranıyor
   GetParent D:\Gunes\Kasım\ dizinini dönüyor,
   dizinindeki klasör listesini alıp tek tek klasörlerin içini tarıyor.
   GetDirectories  'D:\Gunes\Kasım\01','D:\Gunes\Kasım\02'...
 *)
 FolderParent := TDirectory.GetParent(MFolder);
 Directories := TDirectory.GetDirectories(FolderParent);
 for I := Low(Directories) to High(Directories) do
 begin
   result := Findfile(Directories[i], MFName);
   if result <> '' then
     exit;
 end; // for i

 (*
   Bir seviye daha Üst Path klasörleri taranıyor.
   GetParent D:\Gunes\ dizinini dönüyor,
   dizinindeki klasör listesini alıp tek tek klasörlerin içini tarıyor.
   GetDirectories  'D:\Gunes\Kasım','D:\Gunes\Aralık'...
   sonra ilk klasörden başlayarak döngü halinde sırayla klasörleri arıyor.
 *)
 FolderParent := TDirectory.GetParent(FolderParent);
 Directories := TDirectory.GetDirectories(FolderParent);
 for I := Low(Directories) to High(Directories) do
 begin
   Directories2 := TDirectory.GetDirectories(Directories[i]);
   for a := Low(Directories2) to High(Directories2) do
   begin
     result := Findfile(Directories2[a], MFName);
     if result <> '' then
       exit;
   end; // for a
 end; // for i
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 Sure: TStopwatch;
 Time: String;
begin
 Sure := TStopwatch.StartNew;
 Memo1.Lines.Add('Find: ' + Findfiles(Edit1.Text));
 Time := Format('%s sürede bulundu!',
   [FormatDateTime('hh:nn:ss:zzz', Sure.ElapsedMilliseconds / MSecsPerDay)]);
 Memo1.Lines.Add('Time: ' + Time);
end;

end.
WWW
Cevapla


Bu Konudaki Yorumlar
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: yhackup - 12-11-2018, Saat: 19:38
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: SercanTEK - 12-11-2018, Saat: 20:02
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: hakanharbeli - 12-11-2018, Saat: 20:28
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: frmman - 12-11-2018, Saat: 20:53
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: yhackup - 12-11-2018, Saat: 21:06
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: SercanTEK - 12-11-2018, Saat: 21:16
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: yhackup - 12-11-2018, Saat: 21:18
Cvp: Dosya Bulma (Algoritmik Soru Serisi) - Yazar: SercanTEK - 12-11-2018, Saat: 21:23
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: yhackup - 12-11-2018, Saat: 21:51
Cvp: Dosya Bulma (Algoritmik Soru Serisi) - Yazar: SercanTEK - 12-11-2018, Saat: 23:33
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: frmman - 13-11-2018, Saat: 00:03
Cvp: Dosya Bulma (Algoritmik Soru Serisi) - Yazar: SercanTEK - 13-11-2018, Saat: 00:24
Cvp: Dosya Bulma (Algoritmik Soru Serisi) - Yazar: ssahinoglu - 13-11-2018, Saat: 01:32
Cvp: Dosya Bulma (Algoritmik Soru Serisi) - Yazar: yhackup - 13-11-2018, Saat: 08:36
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: ssahinoglu - 13-11-2018, Saat: 08:54
Cvp: Dosya Bulma (Algoritmik Soru Serisi) - Yazar: yhackup - 13-11-2018, Saat: 09:07
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: esistem - 13-11-2018, Saat: 09:10
Cvp: Dosya Bulma (Algoritmik Soru Serisi) - Yazar: yhackup - 13-11-2018, Saat: 09:12
Cvp: Dosya Bulma (Algoritmik Soru Serisi) - Yazar: Fesih ARSLAN - 13-11-2018, Saat: 09:24
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: yhackup - 13-11-2018, Saat: 09:26
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: esistem - 13-11-2018, Saat: 09:27
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: yhackup - 13-11-2018, Saat: 09:51
Cvp: Dosya Bulma (Algoritmik Soru Serisi) - Yazar: ssahinoglu - 13-11-2018, Saat: 11:27
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: engerex - 13-11-2018, Saat: 09:57
Cvp: Dosya Bulma (Algoritmik Soru Serisi) - Yazar: yhackup - 13-11-2018, Saat: 10:05
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: esistem - 13-11-2018, Saat: 11:24
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: yhackup - 13-11-2018, Saat: 12:27
Cvp: Dosya Bulma (Algoritmik Soru Serisi) - Yazar: yhackup - 14-11-2018, Saat: 08:52
Dosya Bulma (Algoritmik Soru Serisi) - Yazar: engerex - 14-11-2018, Saat: 10:07

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Soru : Interface mi, Abstract Class mı? uparlayan 3 4.996 24-08-2023, Saat: 20:15
Son Yorum: veteran
  Windows Mesajlaşma Sistemi Hk. Soru (+10 Puan) Tuğrul HELVACI 26 23.638 06-10-2022, Saat: 18:47
Son Yorum: Master_Crazy



Konuyu Okuyanlar: 1 Ziyaretçi