![]() |
Relative Pfade
Hallo,
mit der Funktion, werden alle Dateien von dem gewählten Ordner aufgelistet Ich möchte aber der Pfad als Relativ und nicht als absolut so: Test/archiv/test.php logo.gif Und nicht als Absolut so: C:/programme/delphi/Test/archiv/test.php C:/programme/delphi/Test/logo.gif Hier ist der Code :
Delphi-Quellcode:
procedure TForm1.AddFilesToList(Filter, Folder: string; Recurse: Boolean);
var sr: TSearchRec; sDirList: TStringList; i: Integer; begin if FindFirst (Folder + Filter, faAnyFile, sr) = 0 then repeat ListBox1.Items.Add (Folder + sr.Name); until FindNext(sr) <> 0; FindClose(sr); if Recurse then begin sDirList := TStringList.Create; try GetSubDirs (Folder, sDirList); for i := 0 to sDirList.Count - 1 do if (sDirList[i] <> '.') and (sDirList[i] <> '..') then begin Update; ListBox1.Refresh; AddFilesToList (Filter, IncludeTrailingPathDelimiter (Folder + sDirList[i]), Recurse); // hier soll geändert werden end; finally sDirList.Free; end; end; end; procedure TForm1.btnSourceClick(Sender: TObject); var Dir: string; begin Dir := CurrentDir; if SelectDirectory ('Choose Folder', '', Dir) then begin CurrentDir := Dir; AddDelphiFiles; end; end; |
Re: Relative Pfade
Du lässt einfach in diesem Teil
Delphi-Quellcode:
den 'Folder +' weg, also so:
ListBox1.Items.Add (Folder + sr.Name);
Delphi-Quellcode:
Der Rest bleibt, wie er ist.
ListBox1.Items.Add (sr.Name);
Edit: gut, entspricht nicht der Anforderung. |
Re: Relative Pfade
Tach auch,
mit ExtractFilePath(ParamStr(0)) bekommst Du den Pfad indem Dein Executable liegt. Wenn Du alles Pfade relativ zu diesem Pfad haben willst, mußt Du diese entsprechend bearbeiten. Wenn die Pfade alle auf ein Verzeichnis unterhalb Deines Exe Pfades zeigen ist das recht einfach. Wenn nicht mußt Du schauen wie der Pfad zu dem bekannten Pfad relativ verläuft. Grüße Klaus |
Re: Relative Pfade
Am Rapid Application Development?
taktaky o.ä. eventuell wäre es für dich ratsam, mal dienen Quelltext selber anzuschauen und zu verstehen, was wie gemacht wird. Dann erübrigen sich einige deiner Fragen und du selber wirst auch nach und nach Delphi lernen. |
Re: Relative Pfade
Zitat:
Es soll aber nur von C:/ bis Delphi/ gelöscht (also bis exe Ordner) <> |
Re: Relative Pfade
Zitat:
|
Re: Relative Pfade
|
Re: Relative Pfade
Zitat:
Delphi-Quellcode:
Delete(RelativerPfad, 1, length(Folder));
|
Re: Relative Pfade
Hallo,
zum Erzeugen relativer Pfadangaben kann man auch die Funktion ![]()
Delphi-Quellcode:
Gruß Hawkeye
ExtractRelativePath('C:\programme\delphi\', 'C:\programme\delphi\Test\archiv\test.php')
|
Re: Relative Pfade
Zitat:
|
Re: Relative Pfade
Die Flexibilität lässt sich ein wenig erhöhen:
Delphi-Quellcode:
Grüße vom marabu
const
ENV_DELPHI = 'DELPHI'; var basePath: string; begin basePath := IncludeTrailingPathDelimiter(GetEnvironmentVariable(ENV_DELPHI)); ShowMessage(ExtractRelativePath(basePath, ParamStr(0))); end; |
Re: Relative Pfade
man könnte ja och in AddFilesToList die Übergabe des Folder-Parameters ändern :angel:
Code:
aufgerufen wird es dann ganz genauso wie die originale Funktion.
procedure TForm1.AddFilesToList(Filter, Folder: string; Recurse: Boolean[color=#ff0000];
RelFolder = ''[/color]); var sr: TSearchRec; sDirList: TStringList; i: Integer; begin if FindFirst (Folder + [color=#ff0000]RelFolder +[/color] Filter, faAnyFile, sr) = 0 then repeat ListBox1.Items.Add ([color=#ff0000]RelFolder +[/color] sr.Name); until FindNext(sr) <> 0; FindClose(sr); if Recurse then begin sDirList := TStringList.Create; try GetSubDirs (Folder [color=#ff0000]+ RelFolder[/color], sDirList); for i := 0 to sDirList.Count - 1 do if (sDirList[i] <> '.') and (sDirList[i] <> '..') then begin Update; ListBox1.Refresh; AddFilesToList (Filter, [color=#ff0000]Folder[/color], Recurse[color=#ff0000], IncludeTrailingPathDelimiter (RelFolder + sDirList[i])[/color]); end; finally sDirList.Free; end; end; end; RelFolder bleibt also beim Aufruf frei und wird nur intern verwendet. und in Kurz zusammen mit anderen kleinen Änderungen (siehe Kommentare) dann so:
Delphi-Quellcode:
procedure TForm1.AddFilesToList(const Filter, Folder: String; Recurse: Boolean;
const RelFolder: String = ''); var sr: TSearchRec; begin if FindFirst(Folder + RelFolder + Filter, faAnyFile, sr) = 0 then repeat if (sr.Name = '.') or (sr.Name = '..') // du wills doch eh nur Dateinamen (AddFiles?) or (sr.Attr and faDirectory <> 0) then continue; ListBox1.Items.Add(RelFolder + sr.Name); until FindNext(sr) <> 0; FindClose(sr); if Recurse and FindFirst(Folder + RelFolder + '*.*', faAnyFile, sr) = 0 then repeat if (sr.Name = '.') or (sr.Name = '..') // nur Verzeichnisse or (sr.Attr and faDirectory = 0) then continue; Update; ListBox1.Refresh; AddFilesToList(Filter, Folder, true, RelFolder + sr.Name + '/'); until FindNext(sr) <> 0; FindClose(sr); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:06 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