Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#8

AW: Android App, zusätzlich eine TStringlist abspeichern

  Alt 17. Sep 2014, 10:18
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (17. Sep 2014 um 10:23 Uhr)
  Mit Zitat antworten Zitat