Einzelnen Beitrag anzeigen

Flodding

Registriert seit: 26. Dez 2007
Ort: Kiel
121 Beiträge
 
Turbo Delphi für Win32
 
#1

Ordner rekursiv durchsuchen bis zu maximaler Tiefe

  Alt 28. Dez 2009, 00:25
Guten Abend zusammen...

ich arbeite grade an einem kleinen Projekt für das MMORPG "World of Warcraft".

Eigentlich macht dieses kleine Tool nichts weiter als den "Cache" Ordner und *.bak's aud diversen Unterordnern des WoW Verzeichnisses zu löschen um die Ladezeiten zu verkürzen... danach startet es dann den normalen WoW-Launcher und beendet sich danach selber.

bis jetzt hat alles gut geklappt...

sachen wie:

Delphi-Quellcode:
reg.Access := KEY_READ;
Reg.OpenKey('\Software\Blizzard Entertainment\World of Warcraft\', false);
GamePath:=Reg.ReadString('InstallPath');
und so liefen wie geschmiert...

auch

Delphi-Quellcode:
procedure TForm1.FileSearch(const PathName, FileName : string; const InDir : boolean);
var Rec : TSearchRec;
    Path : string;
begin
Path := IncludeTrailingBackslash(PathName);
if FindFirst(Path + FileName, faAnyFile - faDirectory, Rec) = 0 then
 try
   repeat
   DeleteFile(Path + Rec.Name);
   if not FileExists(Path + Rec.Name) then form3.ListBox1.Items.Add(Path + Rec.Name);
   if form3.ListBox1.Items.count > 2 then form3.Label1.Caption:= inttostr(form3.ListBox1.Items.Count) + ' Dateien gelöscht';
   if form3.ListBox1.Items.count = 1 then form3.Label1.Caption:= inttostr(form3.ListBox1.Items.Count) + ' Datei gelöscht';
   SetHorizontalScrollBar(form3.ListBox1) ;
   form3.Button1.Enabled:=false;
   until FindNext(Rec) <> 0;
 finally
   FindClose(Rec);
 end;

If not InDir then Exit;

if FindFirst(Path + '*.*', faDirectory, Rec) = 0 then
 try
   repeat
    if ((Rec.Attr and faDirectory) <> 0) and (Rec.Name<>'.') and (Rec.Name<>'..') then
     FileSearch(Path + Rec.Name, FileName, True);
   until FindNext(Rec) <> 0;
 finally
   FindClose(Rec);
 end;
form3.Button1.Enabled:=true;
end;
funktioniert ganz okay... auch wenns bestimmt besser geht... es erfüllt seinen Zweck.

Doch jetzt bin ich an dem Punkt, wo ich die "procedure TForm1.FileSearch" umbasteln muss, oder ne ganz andere brauche, denn ich möchte jetzt im "Path\Interface\Addons\" nach den *.toc's der installierten Addons suchen und diese dann auflisten um sie auf aktualität zu überprüfen... für die die nicht wissen wie so eine TOC aufgebaut ist:

---
## Interface: 30300
## Title: TweakWoW
## Author: xXx
## Version: 1.0
## Notes: ...
## DefaultState: Enabled
## LoadOnDemand: 0
## SavedVariables: AutoSellGreys, AutoRepair
TweakWoW.xml
---

Jetzt erkennt man schon dass ich in der zeile die zeichen nach "## Version: " suchen muss... das sollte später auch nicht das problem sein...

Jetzt also zu meinem Problem.

Wie gesagt ich befinde mich zurzeit im Ordner "Path\Interface\Addons\". Wenn ich jetzt die TOC von oben finden möchte muss ich in "Path\Interface\Addons\TweakWoW\" suchen und ich werde fündig. Jedoch gibt es andere Addons die weitere Unterordner beinhalten und in diesen befinden sich auch TOC's. Diese möchte ich aber bei einer Suche NICHT finden. Es geht mir nur um diese:

"Path\Interface\Addons\ADDONNAME\ADDONNAME.TOC "

Ich bin mir ziemlich sicher, dass ich mit der rekursiven Suche relativ nahe dran bin, jedoch habe ich nichts gefunden, womit ich die Unterordnertiefe bei einer suche einstellen kann...

Vielen Dank schonmal an hilfreiche Antworten

MFG

Floddy
Flo
  Mit Zitat antworten Zitat