AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi datei auf ftp suchen?
Thema durchsuchen
Ansicht
Themen-Optionen

datei auf ftp suchen?

Ein Thema von nimmersattXD · begonnen am 18. Jun 2009 · letzter Beitrag vom 19. Jun 2009
Antwort Antwort
Benutzerbild von nimmersattXD
nimmersattXD

Registriert seit: 1. Jun 2009
Ort: Sangerhausen
65 Beiträge
 
Delphi 7 Personal
 
#1

datei auf ftp suchen?

  Alt 18. Jun 2009, 13:33
hallo zusammen!

ich moechte gern auf einem ftp server nach dateien suchen. mein programm hat schon eine routine das in ordern nach dateien sucht und eine verbindung zum ftp mittels indy-ftp herstellen kann.

wie kann ich nun in den ordern vom ftp nach dateien suchen?

auszuege aus meinem quelltext:

Delphi-Quellcode:
 
//routine die dateien sucht und in einer hashtable speichert
procedure GetFilesInDirectory1(Directory: String; const Mask: String;
                              List: TStringDictionary;
                              WithSubDirs, ClearList: Boolean);

procedure ScanDir(const Directory: String);
var
  SR: TSearchRec;
begin
  if FindFirst(Directory + Mask, faAnyFile - faDirectory, SR) = 0 then try
    repeat
      List.Add(Directory+SR.Name,nil);
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;

  if WithSubDirs then begin
    if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then try
      repeat
        if ((SR.attr and faDirectory) = faDirectory) and
           (SR.Name <> '.') and (SR.Name <> '..') then
          ScanDir(Directory + SR.Name + '\');
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  end;
end;

begin
    if ClearList then
      List.Clear;
    if Directory = 'then Exit;
    ScanDir(IncludeTrailingPathDelimiter(Directory));
end;

//routine die zur zeit noch in ordnern auf dem pc sucht (durch eingeben des pfades in EdPathP)
procedure TForm1.BtnSearchPicClick(Sender: TObject); //zum finden der Bilder in Ordner
var direct:string;
begin
direct:=EdpathP.Text;
hashpic:=TStringDictionary.Create;

if not (EdpathP.Text='') then
 begin
 GetFilesInDirectory(direct,'*.jpg',hashpic,true,true);
 GetFilesInDirectory(direct,'*.png',hashpic,true,false);
 GetFilesInDirectory(direct,'*.pdf',hashpic,true,false);
 GetFilesInDirectory(direct,'*.bmp',hashpic,true,false);
 GetFilesInDirectory(direct,'*.gif*',hashpic,true,false);
 end
else ShowMessage('Please, insert the directory paths first!');

LbPic.Caption:=inttostr(hashpic.TotalCount);

end;
Sorry an alle fuer die es schwerfaellt meine texte zu lesen! ich bin im moment in england und hab nur eine englische tastatur, also leider keine umlaute usw.!

http://nimmersatt-xd.mybrute.com
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: datei auf ftp suchen?

  Alt 18. Jun 2009, 15:54
Frage zur Implementation deiner Scanroutine für die normalen (also nicht-FTP) Dateien:

Wenn du 5 verschiedene Dateiarten suchen willst, warum scannst du dann 5 mal das komplette Verszeichnis? Übergib doch ein Array oder eine Liste von Dateimasken und scanne das Verzeichnis nur einmal!

(das kann für das Auslesen von Verzeichnissen per FTP sehr wichtig werden -> Bandbreite begrenzen)

Für das Auslesen von Verzeichnissen kannst du am besten die Indy-Komponente TidFTP verwenden. Dort gibt es auch Methoden mit denen sich Inhalte eines einzelnen Verzeichnisses listen lasssen. Diese müssen dann genauso wie in deinem Besipiel rekursiv aufgerufen werden um sich durch die Verzeichnisse zu "hangeln".
Ralf Kaiser
  Mit Zitat antworten Zitat
Benutzerbild von nimmersattXD
nimmersattXD

Registriert seit: 1. Jun 2009
Ort: Sangerhausen
65 Beiträge
 
Delphi 7 Personal
 
#3

Re: datei auf ftp suchen?

  Alt 18. Jun 2009, 16:12
och menno, also muss ich meine ganze suchroutine, die ich aus dem easyDelphiHelper hab umschreiben?? sodass sie das gleiche auf dem ftp macht? und wie aender ich die routine denn um das sie nur einmal sucht? die TidFTP hab ich schon drin, un verbinden klappt auch schon ...

sorry bin anfaenger!
Sorry an alle fuer die es schwerfaellt meine texte zu lesen! ich bin im moment in england und hab nur eine englische tastatur, also leider keine umlaute usw.!

http://nimmersatt-xd.mybrute.com
  Mit Zitat antworten Zitat
Benutzerbild von nimmersattXD
nimmersattXD

Registriert seit: 1. Jun 2009
Ort: Sangerhausen
65 Beiträge
 
Delphi 7 Personal
 
#4

Re: datei auf ftp suchen?

  Alt 19. Jun 2009, 10:33
ok also wenn ich das procedure GetFilesInDirectory mit einem array als mask mache, dann muss ich doch auch mit ner zaehlschleife jedes einzelne element nehmen und suchen, dann kommt das doch aber auf das selbe drauf raus, wenn ich die prozedur so viele male aufrufe oder?
Sorry an alle fuer die es schwerfaellt meine texte zu lesen! ich bin im moment in england und hab nur eine englische tastatur, also leider keine umlaute usw.!

http://nimmersatt-xd.mybrute.com
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#5

Re: datei auf ftp suchen?

  Alt 19. Jun 2009, 10:56
Wenn du zum Bäcker gehst und dir ein Käsebrötchen, ein Körnerbrötchen und ein Brot kaufen möchtest, gehst du dann auch 3x zum Bäcker und kaufst alles einzeln?
  Mit Zitat antworten Zitat
Benutzerbild von nimmersattXD
nimmersattXD

Registriert seit: 1. Jun 2009
Ort: Sangerhausen
65 Beiträge
 
Delphi 7 Personal
 
#6

Re: datei auf ftp suchen?

  Alt 19. Jun 2009, 10:59
aehm ich weiss ja was ihr meint, aber wenn ich die prozedur mit ner zaehlschleife mache, dann geht er doch auch mehrmals durch und sucht, oder ?? geht das auch anders?
Sorry an alle fuer die es schwerfaellt meine texte zu lesen! ich bin im moment in england und hab nur eine englische tastatur, also leider keine umlaute usw.!

http://nimmersatt-xd.mybrute.com
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: datei auf ftp suchen?

  Alt 19. Jun 2009, 11:01
Zitat von nimmersattXD:
ok also wenn ich das procedure GetFilesInDirectory mit einem array als mask mache, dann muss ich doch auch mit ner zaehlschleife jedes einzelne element nehmen und suchen, dann kommt das doch aber auf das selbe drauf raus, wenn ich die prozedur so viele male aufrufe oder?
Stell dir vor, du scannst ein Verzeichnis mit 100000 Einträgen (inklusive aller Untereinträge). Dann musst du in deiner Variante 500000 Einträge durchsuchen.

Wenn du ein Array mit den Endungen übergibst dann musst du nur noch 100000 Einträge scannen und bei jeden Eintrag lediglich prüfen ob die Endung passt. Du hast dann immer noch 500000 Entscheidungen aber es wird wesentlich weniger auf die Platte zugegriffen.

Jetzt denk das ganze weiter: Beim FTP-Zugriff ist jeder Scanvorgang der auf dem Entfernten Server durchgeführt wird wesentlich "teurer" (Bandbreite). Da lohnt es sich schon mal darüber nachzudenken wie man Zugriffe auf eine externe Resource möglichst minimiert!

Ciao,
Ralf
Ralf Kaiser
  Mit Zitat antworten Zitat
Benutzerbild von nimmersattXD
nimmersattXD

Registriert seit: 1. Jun 2009
Ort: Sangerhausen
65 Beiträge
 
Delphi 7 Personal
 
#8

Re: datei auf ftp suchen?

  Alt 19. Jun 2009, 11:03
ja doch ich hab euch von anfang verstanden, ich weiss nur nicht wie ich das mit nem array umschreiben kann, mir faellt halt dann nur eine zaehlschleife ein, aber da geht er doch dann auch in meinem fall 5 x durch die ordner oder nich? koennt ihr mir an nem beispiel quelltext zeigen wie ihr das machen wuerdet??

[edit]
so wuerde ich eure idee umsetzen: (was leider auch nicht funzt, weil ich bestimmt noch fehler drin hab)
Delphi-Quellcode:
procedure GetFilesInDirectory(Directory: String; const Mask: Array of String;
                              List: TStringDictionary;
                              WithSubDirs, ClearList: Boolean);

procedure ScanDir(const Directory: String);
var
  SR: TSearchRec;
  i:integer;
begin
for i:=1 to 5 do
begin
  if FindFirst(Directory + Mask[i], faAnyFile - faDirectory, SR) = 0 then try
    repeat
      List.Add(SR.Name,nil);
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;

  if WithSubDirs then begin
    if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then try
      repeat
        if ((SR.attr and faDirectory) = faDirectory) and
           (SR.Name <> '.') and (SR.Name <> '..') then
          ScanDir(Directory + SR.Name + '\');
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  end;
end;
end;

begin
    if ClearList then
      List.Clear;
    if Directory = 'then Exit;
    ScanDir(IncludeTrailingPathDelimiter(Directory));
end;

....

procedure TForm1.BtnSearchPicClick(Sender: TObject); //zum finden der Bilder in Ordner
var direct:string;
    PicEnds: array[1..5] of string;
begin
direct:=EdpathP.Text;
hashpic:=TStringDictionary.Create;

PicEnds[1]:='*.jpg';
PicEnds[2]:='*.png';
PicEnds[3]:='*.pdf';
PicEnds[4]:='*.bmp';
PicEnds[5]:='*.gif';

if not (EdpathP.Text='') then GetFilesInDirectory(direct,picends,hashpic,true,true)
else ShowMessage('Please, insert the directory paths first!');

LbPic.Caption:=inttostr(hashpic.TotalCount);

end;
Sorry an alle fuer die es schwerfaellt meine texte zu lesen! ich bin im moment in england und hab nur eine englische tastatur, also leider keine umlaute usw.!

http://nimmersatt-xd.mybrute.com
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz