Einzelnen Beitrag anzeigen

Flodding

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

Re: Ordner rekursiv durchsuchen bis zu maximaler Tiefe

  Alt 29. Dez 2009, 13:51
Hallo nochmal... wie versprochen jetzt nochmal meine Lösung wie ich sie am leichtesten und meiner meinung nach am sinnvollsten umgesetzt habe...

Delphi-Quellcode:
procedure TForm5.FormShow(Sender: TObject);
var
searchResult : TSearchRec;
begin
  SetCurrentDir(form1.gamepath + '\Interface\Addons');
listbox1.Clear;
  if FindFirst('*.*', faDirectory, searchResult) = 0 then
  begin
    repeat
      if (searchResult.attr and faDirectory) = faDirectory then
    if LeftStr(searchResult.Name, 9)='Blizzard_then else ListBox1.Items.Add(searchResult.Name);
    until FindNext(searchResult) <> 0;
    FindClose(searchResult);
    ListBox1.Items.Delete(0);
    ListBox1.Items.Delete(0);
  end;
end;
bewusst im FormShow, damit wirklich jedes mal nach neuen Ordnern gesucht wird...
natürlich hab ich die "Blizzard_" ordner überspringen lassen

und nun zu den TOCs um die es ja eigentlich geht...

Delphi-Quellcode:
procedure TForm5.ListBox1Click(Sender: TObject);
var
i: integer;
versioncheck: integer;
begin
[b]if FileExists(form1.gamepath + 'Interface\Addons\' + ListBox1.Items[ListBox1.ItemIndex] + '\' + ListBox1.Items[ListBox1.ItemIndex] + '.toc') then[/b]
begin
LabeledEdit1.Text:='';
memo1.Lines.Clear;
[b]tocpath:=form1.gamepath + 'Interface\Addons\' + ListBox1.Items[ListBox1.ItemIndex] + '\' + ListBox1.Items[ListBox1.ItemIndex] + '.toc';[/b]
memo1.Lines.LoadFromFile(tocpath);
for i:= 0 to Memo1.Lines.Count-1 do begin
if LeftStr(memo1.Lines[i], 14)='## Interface: then
begin
LabeledEdit1.Text:=MidStr(Memo1.Lines[i], 15, Length(memo1.Lines[i]));
versioncheck:=strtoint(LabeledEdit1.Text);
if versioncheck <> 30300 then LabeledEdit1.Color:= clRed else LabeledEdit1.Color:= clGreen;
versionline:=i;
end;
if LeftStr(memo1.Lines[i], 17)='## Interface: then
begin
LabeledEdit1.Text:=MidStr(Memo1.Lines[i], 18, Length(memo1.Lines[i]));
versioncheck:=strtoint(LabeledEdit1.Text);
if versioncheck <> 30300 then LabeledEdit1.Color:= clRed else LabeledEdit1.Color:= clGreen;
versionline:=i;
end;
end
end

end;
interesant dafür sind hier nur die fett markierten zeilen... der rest dient eigentlich nur dazu, aus der TOC dann die Interfaceversion zu lesen und diese dann in einem LabeledEdit darzustellen um sie nach einem interfaceveränderndem Patch nicht umständlich toc für toc ändern zu müssen über einen texteditor.
blöd daran ist nur, dass beim Speichern...

Delphi-Quellcode:
procedure TForm5.Button2Click(Sender: TObject);
begin
if LabeledEdit1.Text<>'then memo1.Lines.Delete(versionline);
memo1.Lines.Add('## Interface: ' + LabeledEdit1.Text);
Memo1.Lines.SaveToFile(tocpath);
end;
...die neue Zeile ans Ende der TOC gehängt wird und ich keine Möglichkeit gefunden habe die zeile aus der die interfaceversion gelesen wird einfach zu überschreiben... beeinflusst nicht die Funktionalität, sieht aber unschön aus am ende

Wem dazu noch etwas einfällt der kanns ja gerne hier posten.

MFG

Floddy

EDIT:::

sorry übrigens fürs Doppelpost.
Flo
  Mit Zitat antworten Zitat