![]() |
Letzten Ordner aus Pfad ermitteln
Hallo Jungs,
ich steck fest, ich hab es nun geschafft eine XML Datei auszulesen und den gewünschten Tag in eine Listbox zu schreiben, auch hab ich es geschaft das ganze rekursiv zu gestalten das ein Ordner und alle Unterordner durchsucht weren. Das Klappt eigentlich ganz gut, mein Problem ist das ich jetzt noch eine Prüfung einbauen muss die nur gewisse xml dateien für das durchsuchen zulässt da nicht jede xml das gewünschte tag enthält und somit nicht brauchbar ist. Ich benötige eine Prüfmethode die den Ordner indem sich die gefundene Datei befindet mit dem Dateinamen vergleicht und wenn dieser ohne Extension übereinstimmt dann soll sie ausgelesen werden. Ein Ordner heisst zb: \34_44459\ und die Datei im Ordner die ausgelesen werden soll heist dann 34_44459.xml, die restlichen xml Datein die da drin sind sind uninteressant. Es gibt keine Funktion die mir den letzten Ordner aus einem Pfad ausgiebt, wie könnte ich das nun machen, oder gibts vielleicht sogar ne möglichkeit dies in die FindFirst funktion einzubauen damit das direkt schon beim suchen der Datei geprüft wird? Hier mal mein Quellcode:
Delphi-Quellcode:
Vielleicht könnte mir da einer einen Tip geben wie ich vorgehen muss oder wie ich an den letzten Ordner einem Pfad komme.
var
Form1: TForm1; count: integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var directory: string; mask: string; begin Count := 0; Listbox1.Items.Clear; directory := Edit1.Text; mask := '*.xml'; Screen.Cursor := crHourGlass; try GetAllFiles(directory + mask); // ShowMessage(directory+mask); finally Screen.Cursor := crDefault; end; Label2.Caption := (IntToStr(Count) + ' Files found'); end; procedure TForm1.Button2Click(Sender: TObject); var root: string; begin if SelectDirectory('Select a directory', ' ', root) then edit1.Text:= IncludeTrailingPathDelimiter(root) else Edit1.Text:='c:\'; end; procedure TForm1.Button3Click(Sender: TObject); begin ListBox1.Clear; end; procedure TForm1.GetAllFiles(mask: string); var search: TSearchRec; directory: string; aktualDir: string; begin directory := ExtractFilePath(mask); // find all files if FindFirst(mask, $23, search) = 0 then begin repeat // ShowMessage(aktualDir); // ExtractFileName(datei) //XML Datei laden XMLDocument1.LoadFromFile(directory + search.Name); XMLDocument1.Active; // add the files to the listbox Form1.ListBox1.Items.Add(XMLDocument1.DocumentElement.childNodes[0].childNodes[0].Text + ' -- ' + directory + search.Name); Inc(Count); until FindNext(search) <> 0; end; //Unterverzeichnisse durchsuchen if FindFirst(directory + '*.*', faDirectory, search) = 0 then begin repeat if ((search.Attr and faDirectory) = faDirectory) and (search.Name[1] <> '.') then GetAllFiles(directory + search.Name + '\' + ExtractFileName(mask)); until FindNext(search) <> 0; FindClose(search); end; end; Vielen Dank -sm |
Re: Letzten Ordner aus Pfad ermitteln
Versuch es mal mit
Delphi-Quellcode:
ExtractFileName(ExcludeTrailingPathDelimiter(Pfad));
|
Re: Letzten Ordner aus Pfad ermitteln
Danke Deddy!
Leider gibt mir das nur den Dateinamen aus, den hab ich ja, ich müsste aber überprüfen ob der Ordner indem die Datei liegt gleich heisst wie die Datei und wenn Ordner == Dateiname (ohne Extension)soll sie eingelesen werden. Das Problem ist wie komm ich an den Ordnernamen von diesem Verzeichnis. |
Re: Letzten Ordner aus Pfad ermitteln
Also möchtest Du wissen, ob die Datei "ABC.txt" im Ordner "C:\Programme\ABC" liegt (als Beispiel)?
|
Re: Letzten Ordner aus Pfad ermitteln
Du hast einen String der so aussieht:
Zitat:
Delphi-Quellcode:
ExtractFilename(ExcludeTrailingPathDelimiter(ExtractFilePath(Path)))
|
Re: Letzten Ordner aus Pfad ermitteln
:)
Ja genau, also ich mach mal ein Beispiel. Es gibt viele Ordner und jeder Ordner hat einen Namen aus einer Zahlencombination. 34_5556/ indem die Datei 34_5556.xml liegt 34_5557/ indem die Datei 34_55567.xml liegt Es liegen aber noch andere xml Files da drin die ich nicht brauche und darum muss ich genau diese Datei rausholen. In den anderen xml Dateien kommt der Ordnername auch vor nur steht da auch noch anderes Zeug dabei zb. param-dep-34_5556.xml, diese sollen nicht gefunden werden. Ich dachte nun ich vergleiche den Dateinamen mit dem Letzten Ordner im Pfad und wenn der genau übereinstimmt dann soll sie ausgelesen werden. Ich hoffe das war verständlich erklärt? |
Re: Letzten Ordner aus Pfad ermitteln
Versuch es mal hiermit:
Delphi-Quellcode:
Müsste eigentlich klappen.
function DirHasSameName(const Filename: TFileName): Boolean;
begin Result := AnsiSameText(ChangeFileExt(ExtractFileName(Filename),''), ExtractFileName(ExcludeTrailingPathDelimiter(ExtractFilePath(Filename)))); end; |
Re: Letzten Ordner aus Pfad ermitteln
Super das haut schonmal klasse hin!!!!
Danke dir vielmals Daddy!, ich werde es jetzt mal so versuchen, danke für die schnelle Hilfe. :lol: EDIT: Hast du noch ne Idee wie ich die Dateiendung vom Dateinamen entfernen kann? EDIT2: Hab erst jetzt die Funktion gesehen, die muss ich mir jetzt erstmal durch den Kopf gehen lassen, mal sehen wo ich die wie anwenden muss. Danke dir, habs zwar noch nicht ganz verstanden aber ich versuch mal bischen rum. |
Re: Letzten Ordner aus Pfad ermitteln
Habs zwar nicht mit der Funktion gemacht, eher auf die schmutzige weise aber es haut hin!!
Vielen Dank nochmal Deddy für deine freundliche Unterstützung. Hier noch wie ichs gemacht hab:
Delphi-Quellcode:
// find all files
if FindFirst(mask, $23, search) = 0 then begin repeat aktualDir:= ExtractFilename(ExcludeTrailingPathDelimiter(ExtractFilePath(directory + search.Name))); aktualFile:= ChangeFileExt(search.Name, ''); // ShowMessage(aktualFile); if (aktualDir = aktualFile) then begin //XML Datei laden XMLDocument1.LoadFromFile(directory + search.Name); XMLDocument1.Active; // add the files to the listbox Form1.ListBox1.Items.Add(XMLDocument1.DocumentElement.childNodes[0].childNodes[0].Text + ' -- ' + directory + search.Name); Inc(Count); end; until FindNext(search) <> 0; end; |
Re: Letzten Ordner aus Pfad ermitteln
Das ist im Prinzip das, was meine Funktion auch macht mit einem kleinen Unterschied: ich unterscheide nicht zwischen Groß- und Kleinschreibung, was Dein
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 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 by Thomas Breitkreuz