Einzelnen Beitrag anzeigen

sexmagic

Registriert seit: 16. Sep 2006
56 Beiträge
 
Delphi 2006 Professional
 
#1

Letzten Ordner aus Pfad ermitteln

  Alt 12. Okt 2008, 15:28
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
  Mit Zitat antworten Zitat