AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Dateipfade aus ordner als einzelne Strings abspeichern
Thema durchsuchen
Ansicht
Themen-Optionen

Dateipfade aus ordner als einzelne Strings abspeichern

Ein Thema von Marmelade · begonnen am 31. Aug 2008 · letzter Beitrag vom 4. Sep 2008
Antwort Antwort
Seite 1 von 2  1 2      
Marmelade

Registriert seit: 31. Aug 2008
7 Beiträge
 
Turbo Delphi für Win32
 
#1

Dateipfade aus ordner als einzelne Strings abspeichern

  Alt 31. Aug 2008, 19:44
Hey Leute
Ich bin grade erst in Delphi eingestiegen und wollte wissen, wie ich, wenn ich einen ordner mithilfe von SelectDirectory ausgewählt habe, ihn nach datein durchsuchen kann und die Dateipfade jeweils als eine Variable speichern kann.
Wie gesgt, versuch mir Delphi grade ein bischen beizubringen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Dateipfade aus ordner als einzelne Strings abspeichern

  Alt 31. Aug 2008, 19:48
Such mal FindFirst/FindNext
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von smallsmoker
smallsmoker

Registriert seit: 12. Nov 2007
Ort: Duisburg
283 Beiträge
 
#3

Re: Dateipfade aus ordner als einzelne Strings abspeichern

  Alt 31. Aug 2008, 19:51
das ist leider etwas kompizierter da du ja auch die unterordner dursuchen müsstest also muss die funktion rekursiv sein sprich sich selber im unterordner aufrufen
code beispiel
Delphi-Quellcode:
{ Like prüft die Übereinstimmung eines Strings mit einem Muster.
  So liefert Like('Delphi', 'D*p?i') true.
  Der Vergleich berücksichtigt Klein- und Großschreibung.
  Ist das nicht gewünscht, muss statt dessen
  Like(AnsiUpperCase(AString), AnsiUpperCase(APattern)) benutzt werden: }


function Like(const AString, APattern: String): Boolean;
var
  StringPtr, PatternPtr: PChar;
  StringRes, PatternRes: PChar;
begin
  Result:=false;
  StringPtr:=PChar(AString);
  PatternPtr:=PChar(APattern);
  StringRes:=nil;
  PatternRes:=nil;
  repeat
    repeat // ohne vorangegangenes "*"
      case PatternPtr^ of
        #0: begin
          Result:=StringPtr^=#0;
          if Result or (StringRes=nil) or (PatternRes=nil) then
            Exit;
          StringPtr:=StringRes;
          PatternPtr:=PatternRes;
          Break;
        end;
        '*': begin
          inc(PatternPtr);
          PatternRes:=PatternPtr;
          Break;
        end;
        '?': begin
          if StringPtr^=#0 then
            Exit;
          inc(StringPtr);
          inc(PatternPtr);
        end;
        else begin
          if StringPtr^=#0 then
            Exit;
          if StringPtr^<>PatternPtr^ then begin
            if (StringRes=nil) or (PatternRes=nil) then
              Exit;
            StringPtr:=StringRes;
            PatternPtr:=PatternRes;
            Break;
          end
          else begin
            inc(StringPtr);
            inc(PatternPtr);
          end;
        end;
      end;
    until false;
    repeat // mit vorangegangenem "*"
      case PatternPtr^ of
        #0: begin
          Result:=true;
          Exit;
        end;
        '*': begin
          inc(PatternPtr);
          PatternRes:=PatternPtr;
        end;
        '?': begin
          if StringPtr^=#0 then
            Exit;
          inc(StringPtr);
          inc(PatternPtr);
        end;
        else begin
          repeat
            if StringPtr^=#0 then
              Exit;
            if StringPtr^=PatternPtr^ then
              Break;
            inc(StringPtr);
          until false;
          inc(StringPtr);
          StringRes:=StringPtr;
          inc(PatternPtr);
          Break;
        end;
      end;
    until false;
  until false;
end; {Michael Winter}

procedure FindAllFiles(FileList: TStrings; RootFolder: string; Mask: string ='*'; Recurse: Boolean = True; AddFolderNames: Boolean = False; IgnoreMaskAtFolderNames: Boolean = True);
  procedure LFindAllFiles(AParentFolder: String);
  var LSearchRec: TSearchRec;
  begin
    if FindFirst(AParentFolder + '*', faAnyFile, LSearchRec) = 0 then
    begin
      repeat
        if (LSearchRec.Name <> '.') and (LSearchRec.Name <> '..') then
        begin
          if LSearchRec.Attr and faDirectory = faDirectory then
          begin
            if AddFolderNames and
               (IgnoreMaskAtFolderNames or Like(AnsiLowerCase(LSearchRec.Name), Mask)) then
              FileList.AddObject(AParentFolder + LSearchRec.Name, TObject(True));
            if Recurse then
              LFindAllFiles(AParentFolder + LSearchRec.Name + '\');
          end
          else if Like(AnsiLowerCase(LSearchRec.Name), Mask) then
            FileList.AddObject(AParentFolder + LSearchRec.Name, TObject(False));
        end;
      until FindNext(LSearchRec) <> 0;
      FindClose(LSearchRec);
    end;
  end;
begin
  Mask := AnsiLowerCase(Mask);
  LFindAllFiles(IncludeTrailingPathDelimiter(RootFolder));
end;
hier entnommen

beispiel aufruf:
Delphi-Quellcode:
procedure TForm4.Button1Click(Sender: TObject);
var
  slfiles: tstringlist;
begin
  slfiles := tstringlist.Create;
    try
      findallfiles(slfiles,'c:\MeinOrdner\','*.*',true,true,true);
      combobox1.Items := slfiles;
    finally
      slfiles.Free;
    end;
end;
wenn recurse = true ist dann werden auch unterordner in die suche mit einbezogen

mfg smallsmoker

p.s.: soweit habe ich es zumindest verstanden
  Mit Zitat antworten Zitat
Marmelade

Registriert seit: 31. Aug 2008
7 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Dateipfade aus ordner als einzelne Strings abspeichern

  Alt 31. Aug 2008, 20:05
Hi,
danke für die schnellen Antworten.
Ich hab jezz mal nach FindFirst/FindNext gesucht aber da ich noch ein totaler Anfänger bin konnte ich mit den Erklärungen nich besonders viel anfangen.
@smallsmoker: Das was du geschrieben hast sieht echt toll aus aber ich versteh da nur Bahnhof. Kannste das vieleicht noch n bisschen näher erklären? Wäre echt nett.
  Mit Zitat antworten Zitat
Benedikt
(Gast)

n/a Beiträge
 
#5

Re: Dateipfade aus ordner als einzelne Strings abspeichern

  Alt 31. Aug 2008, 20:34
Nabend,

was genau verstehst du denn nicht? Wenn du einfach nur dass anwenden möchtest, was du geschrieben hast, dann pack dir einfach den Code von smallsmoker/der CodeLibrary mit in deinen Quelltext und benutze den Beispielaufruf. Bei diesem übergibst du dann eben nicht statisch den Ordner-Pfad, sondern den, den du von deinem Dialog erhalten hast. Danach hast du alle gefundenen Dateien in einer String-Liste (siehe dazu die OH zu TStringList).

Oder aber geht es dir darum, zu verstehen wie die Ordner durchsucht werden und wie die Dateien gefunden werden? Dann ist der gepostete Code zum Lernen wahrscheinlich etwas ungeeignet, weil da noch viel zusätzliche Sachen mit reinspielen und um das Prinzip erstmal zu verstehen da eigentlich fast alles überflüssig ist In diesem Fall solltest du mal in der Delphi-Hilfe nach FindNext suchen, da gibts auch ein deutlich einfacheres Beispiel (ohne Rekursion und Masken etc) (und mit Sicherheit im Internet und hier im Forum auch zur Genüge) mit dem dir das auch gelingen sollte

MfG Benedikt
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
946 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Dateipfade aus ordner als einzelne Strings abspeichern

  Alt 31. Aug 2008, 20:40
Hi Marmelade

Falls noch nicht geschehen, Willkommen in der DP.

Damit nicht gleich wieder so'ne 'obskure' Diskussion losgeht:

Delphi starten, meinetwegen 'neue Anwendung' auswählen und los geht es.

Wir legen in private-Bereich eine Procedure an, sagen wir mal FindAllFilesInDirectory(StartPfad : String);
die Procedure-Deklaration kopieren wir in den freien Teil der unter implementation und dem end..

Als nächstest brauchen wir ein paar Variablen, also schreiben wir var und
darunter so etwas wie SRec : TSearchRec;, dann ein begin und ein end;.
Zwischen 'begin' und 'end' kommt dann FindFirst(StartPfad, '*.*', SRec);.

Damit du selber weiterkommst, würde ich jetzt 'FindFirst' anklicken und mit der rechten Maustaste das
Kontextmenü aufrufen. Anschließend dem Menüpunkt zur Hilfe aufrufen und mir die Erklärung sowie das
Beispiel durchlesen.

Gruß

PS Ist zwar Übertrieben, aber es Hilft Dir vielleicht.

[Edit] Benedikt war wohl schneller mit den Antworten...[/Edit]
  Mit Zitat antworten Zitat
Marmelade

Registriert seit: 31. Aug 2008
7 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Dateipfade aus ordner als einzelne Strings abspeichern

  Alt 1. Sep 2008, 20:46
@Alter Mann
Danke das is schon eher was womit ich was anfangen kann.
Aber wenn ich
Delphi-Quellcode:
private
  FindAllFilesInDirectory (StartPfad : String);
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
Reinschreib ist die 1. Klammer nach FindAllFilesInDirectory, der Doppelpunkt aus (StartPfad : String); und das end; rot unterstrichen?
Mach ich da was falsch?
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Dateipfade aus ordner als einzelne Strings abspeichern

  Alt 1. Sep 2008, 21:33
Hi

Zitat von Marmelade:
Delphi-Quellcode:
private
  Procedure FindAllFilesInDirectory (StartPfad : String);
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
Reinschreib ist die 1. Klammer nach FindAllFilesInDirectory, der Doppelpunkt aus (StartPfad : String); und das end; rot unterstrichen?
Mach ich da was falsch?
Jo, schreib mal "Procedure" vor den Prozedurnamen...
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Marmelade

Registriert seit: 31. Aug 2008
7 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Dateipfade aus ordner als einzelne Strings abspeichern

  Alt 2. Sep 2008, 19:16
Hey cool danke.
Jetzt ist bei mir noch FindFirst(StartPfad, '*.*', SRec); 'StartPfad' rot unterstrichen da steht dann "Nicht deklarierter Bezeichner"
Was ist das jetzt?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#10

Re: Dateipfade aus ordner als einzelne Strings abspeichern

  Alt 2. Sep 2008, 19:18
Hast Du denn eine String-Variable names "Startpfad"?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:21 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