Entwickler-Ecke
Dateizugriff - IncludeTrailingPathDelimiter und Delphi3
Biarchiv - Sa 19.10.02 16:59
Titel: IncludeTrailingPathDelimiter und Delphi3
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 - Sa 19.10.02 17:24
Titel: Re: IncludeTrailingPathDelimiter und Delphi3
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:
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; |
Anonymous - 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 - 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).
Anonymous - 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 - 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.
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.
Anonymous - 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!