Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Letzten Ordner aus Pfad ermitteln (https://www.delphipraxis.net/122262-letzten-ordner-aus-pfad-ermitteln.html)

sexmagic 12. Okt 2008 14:28


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:
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;
Vielleicht könnte mir da einer einen Tip geben wie ich vorgehen muss oder wie ich an den letzten Ordner einem Pfad komme.

Vielen Dank

-sm

DeddyH 12. Okt 2008 14:32

Re: Letzten Ordner aus Pfad ermitteln
 
Versuch es mal mit
Delphi-Quellcode:
ExtractFileName(ExcludeTrailingPathDelimiter(Pfad));

sexmagic 12. Okt 2008 14:41

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.

DeddyH 12. Okt 2008 14:44

Re: Letzten Ordner aus Pfad ermitteln
 
Also möchtest Du wissen, ob die Datei "ABC.txt" im Ordner "C:\Programme\ABC" liegt (als Beispiel)?

dominikkv 12. Okt 2008 14:47

Re: Letzten Ordner aus Pfad ermitteln
 
Du hast einen String der so aussieht:
Zitat:

C:\Ordner1\Ordner2\Datei1.bla
dann kommst du an den Ordner über
Delphi-Quellcode:
ExtractFilename(ExcludeTrailingPathDelimiter(ExtractFilePath(Path)))

sexmagic 12. Okt 2008 14:51

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?

DeddyH 12. Okt 2008 14:54

Re: Letzten Ordner aus Pfad ermitteln
 
Versuch es mal hiermit:
Delphi-Quellcode:
function DirHasSameName(const Filename: TFileName): Boolean;
begin
  Result := AnsiSameText(ChangeFileExt(ExtractFileName(Filename),''),
                         ExtractFileName(ExcludeTrailingPathDelimiter(ExtractFilePath(Filename))));
end;
Müsste eigentlich klappen.

sexmagic 12. Okt 2008 14:56

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.

sexmagic 12. Okt 2008 15:17

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;

DeddyH 12. Okt 2008 15:21

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:

Delphi-Quellcode:
if (aktualDir = aktualFile) then

schon tut. Aber wenn die Dateinamen sowieso nur numerisch sind, sollte das keinen Unterschied machen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:53 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