Delphi-Quellcode:
function TPrgData.GetDevelopDatDir:
String;
// für die Entwicklungsphase, da TPath.GetHomePath bei jeder Installation aus der IDE
// heraus gelöscht wird.
var res:
String;
begin
res:=TPath.GetSharedDownloadsPath;
while (copy(res, length(res), 1)<>TPath.DirectorySeparatorChar)
and (res<>'
')
do
System.Delete(res,length(res),1);
result:=res+'
MyTestApp' + TPath.DirectorySeparatorChar;
//'/storage/sdcard0/MyTestApp/';
end;
Und das funktioniert?
Wo doch im mobilen Sektor jetzt die Strings standardmäßig 0- und nicht mehr 1-indiziert sind und somit das Length nicht mehr den letzten Char trifft.
Es gibt auch so Funktionen wie EndsStr, oder den High- und Low-Befehl, welcher den richtigen Index benutzt und die neuen String-Helper sind überall 0-basierend.
Delphi-Quellcode:
Low(string) // das erst Char (0 oder 1)
Low(StrVar) // das erst Char (0 oder 1)
High(StrVar) // das letzte Char
Length(StrVar) // die Zeichennzahl
Und wenn du schon die neuen Konstanten der IOUtils verwendest (anstatt dem alten PathDelim), warum machst du dann immernoch alles per Hand, obwohl es schon seit Jahrzehnten Funktionen dafür gibt?
(ich mein vorallem die komische Schleife > ExtractFilePath/ExtractFileDir)
Delphi-Quellcode:
function TPrgData.GetDevelopDatDir:
string;
// für die Entwicklungsphase, da TPath.GetHomePath bei jeder Installation aus der IDE heraus gelöscht wird.
begin
Result := TPath.GetSharedDownloadsPath;
Result := ExtractFilePath(Result);
Result := IncludeTrailingPathDelimiter(Result + '
MyTestApp');
//'/storage/sdcard0/MyTestApp/';
end;
function TPrgData.GetDevelopDatDir:
string;
begin
Result := IncludeTrailingPathDelimiter(ExtractFilePath(TPath.Combine(TPath.GetSharedDownloadsPath, '
MyTestApp')));
// für die Entwicklungsphase, da TPath.GetHomePath bei jeder Installation aus der IDE heraus gelöscht wird.
// Result := '/storage/sdcard0/MyTestApp/';
end;
Für die beiden Funktionen IncludeTrailingPathDelimiter und ExtractFilePath gibt es in der IOUtils bestimmt auch neue Implementationen, die ich jetzt aber nicht im Kopf hab. (sowas wie TPath.GetDirName)
Man kann auch
{$IFDEF DEBUG}
verwenden, welches standardmäßig im Debug-Profil gesetzt ist.
Oder man erstellt sich eigene DEFINEs, für seine Developmentumgbung, wo man dann so Funktionen, wie diesen Pfad, automatisch umschalten kann.