![]() |
Dateipfade aus ordner als einzelne Strings abspeichern
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. :glaskugel: Wie gesgt, versuch mir Delphi grade ein bischen beizubringen. |
Re: Dateipfade aus ordner als einzelne Strings abspeichern
Such mal FindFirst/FindNext
|
Re: Dateipfade aus ordner als einzelne Strings abspeichern
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; ![]() beispiel aufruf:
Delphi-Quellcode:
wenn recurse = true ist dann werden auch unterordner in die suche mit einbezogen
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; mfg smallsmoker p.s.: soweit habe ich es zumindest verstanden |
Re: Dateipfade aus ordner als einzelne Strings abspeichern
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. |
Re: Dateipfade aus ordner als einzelne Strings abspeichern
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 |
Re: Dateipfade aus ordner als einzelne Strings abspeichern
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] |
Re: Dateipfade aus ordner als einzelne Strings abspeichern
@Alter Mann
Danke das is schon eher was womit ich was anfangen kann. Aber wenn ich
Delphi-Quellcode:
Reinschreib ist die 1. Klammer nach FindAllFilesInDirectory, der Doppelpunkt aus (StartPfad : String); und das end; rot unterstrichen?
private
FindAllFilesInDirectory (StartPfad : String); { Private-Deklarationen } public { Public-Deklarationen } end; Mach ich da was falsch? |
Re: Dateipfade aus ordner als einzelne Strings abspeichern
Hi
Zitat:
|
Re: Dateipfade aus ordner als einzelne Strings abspeichern
Hey cool danke. :-D
Jetzt ist bei mir noch
Delphi-Quellcode:
'StartPfad' rot unterstrichen da steht dann "Nicht deklarierter Bezeichner"
FindFirst(StartPfad, '*.*', SRec);
Was ist das jetzt? |
Re: Dateipfade aus ordner als einzelne Strings abspeichern
Hast Du denn eine String-Variable names "Startpfad"?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz