Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Relative Pfade (https://www.delphipraxis.net/101452-relative-pfade.html)

taktaky 13. Okt 2007 14:51


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;

s-off 13. Okt 2007 14:54

Re: Relative Pfade
 
Du lässt einfach in diesem Teil
Delphi-Quellcode:
ListBox1.Items.Add (Folder + sr.Name);
den 'Folder +' weg, also so:

Delphi-Quellcode:
ListBox1.Items.Add (sr.Name);
Der Rest bleibt, wie er ist.

Edit: gut, entspricht nicht der Anforderung.

Klaus01 13. Okt 2007 14:57

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

quendolineDD 13. Okt 2007 14:58

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.

taktaky 13. Okt 2007 15:07

Re: Relative Pfade
 
Zitat:

Zitat von s-off
Du lässt einfach in diesem Teil
Delphi-Quellcode:
ListBox1.Items.Add (Folder + sr.Name);
den 'Folder +' weg, also so:

Delphi-Quellcode:
ListBox1.Items.Add (sr.Name);
Der Rest bleibt, wie er ist.
Wenn es dazu noch Nachfragen gibt, dreh ich am Rad.

Es wird damit zwar alle Dateien in Haupt Ordner in auch in unter Ordner aufgelistet, aber nur Filenames ! Unter Ordner nicht !

Es soll aber nur von C:/ bis Delphi/ gelöscht (also bis exe Ordner)


<>

quendolineDD 13. Okt 2007 15:08

Re: Relative Pfade
 
Zitat:

Zitat von Klaus01
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

Dann ist das deine Lösung

Die Muhkuh 13. Okt 2007 15:10

Re: Relative Pfade
 
Und was machst Du, wenn ein Benutzer das Programm unter e:\bla\blabla\blablabla liegen hat? ;-)

Die Lösung mit ExtractFilePath(Application.ExeName) ist schon richtig. Per Delphi-Referenz durchsuchenPos, Delphi-Referenz durchsuchenDelete solltest Du diesen wegschneiden können.

Luckie 13. Okt 2007 15:20

Re: Relative Pfade
 
Zitat:

Zitat von taktaky
Ich möchte aber der Pfad als Relativ und nicht als absolut

Relativ zu was? Zu dem Verzeichnis, dass du übergibst? Wenn ja, dann lösch einfach mit Delete die Zeichen weg, die dein Verzeichnis lang ist:
Delphi-Quellcode:
Delete(RelativerPfad, 1, length(Folder));

Hawkeye219 13. Okt 2007 15:47

Re: Relative Pfade
 
Hallo,

zum Erzeugen relativer Pfadangaben kann man auch die Funktion Delphi-Referenz durchsuchenExtractRelativePath aus der Unit SysUtils nutzen, die allerdings unter Windows den Backslash als Trennzeichen erwartet. Der korrekte Aufruf für das erste Beispiel sieht also so aus:

Delphi-Quellcode:
ExtractRelativePath('C:\programme\delphi\', 'C:\programme\delphi\Test\archiv\test.php')
Gruß Hawkeye

quendolineDD 13. Okt 2007 15:52

Re: Relative Pfade
 
Zitat:

Zitat von Hawkeye219
Hallo,

zum Erzeugen relativer Pfadangaben kann man auch die Funktion Delphi-Referenz durchsuchenExtractRelativePath aus der Unit SysUtils nutzen, die allerdings unter Windows den Backslash als Trennzeichen erwartet. Der korrekte Aufruf für das erste Beispiel sieht also so aus:

Delphi-Quellcode:
ExtractRelativePath('C:\programme\delphi\', 'C:\programme\delphi\Test\archiv\test.php')
Gruß Hawkeye

Das wäre aber sehr unflexibel :o)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:51 Uhr.
Seite 1 von 2  1 2      

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