Autor Beitrag
Biarchiv
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: Sa 19.10.02 16:59 
Hallo,

Habe einen Source erhalten denn ich für ein Programm brauche.
Ich verwende Delphi3.
Beim compilen findet er folgenden Befehl in SysUtils noch nicht.
"" IncludeTrailingPathDelimiter(DestPath); ""

Kann man den Befehl irrgendwie bei Delphi3 hinzufügen oder nachahmen?
Würde nur diesen Befehl brauchen. Wenn ich diese Zeile mit // aushacke compiliert er.
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Sa 19.10.02 17:24 
Biarchiv hat folgendes geschrieben:
Habe einen Source erhalten

Meinst du damit vielleicht den meinigen? :roll:

Zitat:
IncludeTrailingPathDelimiter

Das übersetzen wir mal ins Deutsche: Abschließendes Pfadtrennzeichen einfügen.

Du kannst diese Funktion so ersetzen:
ausblenden Quelltext
1:
2:
3:
4:
5:
function IncludeTrailingPathDelimiter(const Path: string): string;
begin
  Result := Path;
  if (Result <> '') and (Result[Length(Result)] <> '\') then Result := Result + '\';
end;

_________________
Ist Zeit wirklich Geld?
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 19.10.02 17:47 
@AndyB

Deine Funktion ist gut. Ich hab mir aber schon vor langer Zeit eine ander geschreiben, bzw. leichter Unterschied zu deiner. Es kann vorkommen, daß einer einfach C schreibt anstellen von C:. Deshalb ohne größeren Aufwand und nur leich abgewandelt benutze ich immer:

if (Length(Result) > 2) and (Result[Length(Result)] <> '\') then Result := Result + '\';

Klar können sich auch hier noch Fehler einschleichen, aber zumindest einer weniger.
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Sa 19.10.02 17:54 
Und wusstest du, dass 'C' kein gültiger Pfad ist? Selbst der Code von IncludeTrainlingPathDelimiter von Borland interessiert sich nicht für ungültige Pfadangaben.
Gib doch mal im Windows Explorer in der Adressleiste einfach ein C ein und drück auf 'Wechseln zu' (bzw. Enter).

_________________
Ist Zeit wirklich Geld?
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 19.10.02 18:14 
Zitat:
Und wusstest du, dass 'C' kein gültiger Pfad ist?


Ja. Deshalb auch

Length(Result) > 2

Ein C wäre also zu wenig. Möglich wäre C: aber natürlich auch C#. Wie gesagt sind Fehler auch in meiner Abänderung möglich, aber eben nicht wenn es nur ein C ist. Wie gesagt soll "Length(Result) > 2" nur ein Fehler mehr ausschließen. Allerdings wäre das natürlich zu wenig wenn jemand die Möglichkeit hätte selbst den Pfad einzugeben, z.B. über Editfeld. Da sollte man noch mehr Anfragen machen. Wie gesagt, sollte nur eine Bemerkung sein.

Ich übrigens benutze beim extrahieren von Pfäden, je nachdem was ich will, entweder ExtractFilePath oder ExtractFileDir. ExtractFilePath lefert ein "\" am ende des Pfades. ExtractFileDir lefert kein "\" am ende des Pfades. Da kann man sich manchmal die Funktion ganz sparen.
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Sa 19.10.02 18:26 
Popov hat folgendes geschrieben:
Ein C wäre also zu wenig

Und was ist mit relativen Pfadangaben? Man kann IncludeTrainlingPathDelimiter nämlich auch dafür einsetzen.
ausblenden Quelltext
1:
Pfad := ExtractFileDrive(ParamStr(0)) + IncludeTrailingPathDelimiter(ParamStr(1));					

So nebenbei ist IncludeTrailingPathDelimiter platformunabhängig und deine Einschränkung "Length(Result) > 2" würde unter Linux bei einem Pfad '/t' nicht funktionieren. Aber das ist eine andere Problematik, die wir hier nicht diskutieren müssen, da der obige Code mit großer Wahrscheinlichkeit nicht unter Kylix eingesetzt wird.

_________________
Ist Zeit wirklich Geld?
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 19.10.02 18:59 
Natürlich schreibe ich aus Erfahrung. Meine Variante ist die billigste Methode zu überprüfen ob einer der etwas unter C: abspeichern wollte nicht den Doppelpunkt vergessen hat. Allerdings gebe ich dir Recht, daß man vorher wissen sollte was man will. Wenn ich mit relativen Pfaden arbeiten will, dann mache ich was anderes als wenn ich mit absoluten Pfaden arbeite. Wenn ich mit Kylix arbeiten will, dann sollte ich auch wissen wie das System bei Linux aussieht.

Allerdings brauchen wir uns auch nicht weiter unterhalten, da keine von den beiden Funktionen narrensicher ist. Bei beiden kann ein "\" am ende des Strings rauskommen ohne ein Pfad zu sein.

Es ist eine Funktion die ein "\" am ende des Strings klatscht ohne zu prüfen ob es wirklich ein Pfad ist.