Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit1;
- interface
- uses
- System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
- FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Memo.Types,
- FMX.StdCtrls, FMX.Edit, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo,
- System.IOUtils;
- type
- TSearchThread = class(TThread)
- private
- FFileName: string;
- FSearchPath: string;
- FFoundPath: string;
- FStatusText: string;
- FDirectoriesSearched: Integer;
- procedure UpdateUI;
- procedure UpdateStatus;
- function FindFile(const FileName, SearchPath: string): string;
- protected
- procedure Execute; override;
- public
- constructor Create(const FileName, SearchPath: string);
- end;
- TForm1 = class(TForm)
- Memo1: TMemo;
- Label1: TLabel;
- Edit1: TEdit;
- Button1: TButton;
- procedure Button1Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- private
- FSearchThread: TSearchThread;
- procedure SearchFiles(const StartDir, FileMask, SearchText: string);
- public
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.fmx}
- {$R *.NmXhdpiPh.fmx ANDROID}
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- Memo1.Lines.Clear;
- FSearchThread := TSearchThread.Create(Edit1.Text, TPath.GetSharedDownloadsPath);
- end;
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- // Código de inicialização vai aqui
- end;
- procedure TForm1.FormDestroy(Sender: TObject);
- begin
- // Código de limpeza vai aqui
- end;
- procedure TForm1.SearchFiles(const StartDir, FileMask, SearchText: string);
- var
- Files, Directories: TArray<string>;
- Lines: TStringList;
- i: Integer;
- begin
- if TDirectory.Exists(StartDir) then
- begin
- Files := TDirectory.GetFiles(StartDir, FileMask);
- for i := 0 to Length(Files) - 1 do
- begin
- Lines := TStringList.Create;
- try
- Lines.LoadFromFile(Files[i]);
- if Lines.Text.Contains(SearchText) then
- begin
- Memo1.Lines.Add('Found in: ' + Files[i]);
- end;
- finally
- Lines.Free;
- end;
- end;
- Directories := TDirectory.GetDirectories(StartDir);
- for i := 0 to Length(Directories) - 1 do
- begin
- Label1.Text := 'Scanning: ' + Directories[i];
- Application.ProcessMessages;
- SearchFiles(Directories[i], FileMask, SearchText);
- end;
- end;
- end;
- { TSearchThread }
- constructor TSearchThread.Create(const FileName, SearchPath: string);
- begin
- inherited Create(False);
- FreeOnTerminate := True;
- FFileName := FileName;
- FSearchPath := SearchPath;
- FDirectoriesSearched := 0;
- end;
- function TSearchThread.FindFile(const FileName, SearchPath: string): string;
- begin
- Form1.SearchFiles(SearchPath, FileName, '');
- Result := '';
- end;
- procedure TSearchThread.Execute;
- begin
- FFoundPath := FindFile(FFileName, FSearchPath);
- Synchronize(UpdateUI);
- end;
- procedure TSearchThread.UpdateUI;
- begin
- if FFoundPath <> '' then
- begin
- Form1.Memo1.Lines.Add('O arquivo ' + FFileName + ' encontrado ' + FFoundPath);
- end
- else
- Form1.Memo1.Lines.Add('O arquivo ' + FFileName + ' não encontrado.');
- end;
- procedure TSearchThread.UpdateStatus;
- begin
- Form1.Label1.Text := FStatusText;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement