Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   AnsiString zu String zuweisen ohne Konvertierung? (https://www.delphipraxis.net/202776-ansistring-zu-string-zuweisen-ohne-konvertierung.html)

Rolf Frei 9. Dez 2019 16:51

AW: AnsiString zu String zuweisen ohne Konvertierung?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1453059)
Also hier funktioniert das tadellos mit den Bytes und UnicodeStrings und AnsiStrings. Du darfst nur nicht mit den UnicodeStrings das encode/decode machen. Dafür nimmst du dann die Bytes.
Delphi-Quellcode:
var
  a: AnsiString;
  b: TBytes;
  s: String;
begin
  a := #$33#$95#$34;
  s := a;
  { Der Inhalt von s interessiert hier nicht. Zur Verarbeitung wandeln wir das in Bytes um. }
  b := TEncoding.ANSI.GetBytes(s);
  Assert(b[0] = $33);
  Assert(b[1] = $95);
  Assert(b[2] = $34);
  a := s;
  Assert(a = #$33#$95#$34);
end;
Ich habe jetzt gerade kein Beispiel mit TInifile, aber mit
Delphi-Quellcode:
LoadFromFile(<filename>, TEncoding.Ansi)
sollte das ebenso funktionieren.

Beim TIniFile gibt es kein LoadFromFile. Lesen/Schreiben von INI-Files funktioniert nicht auf Filebasis wie eine TStringList. Da wird kein File geladen, da ist das OS dafür zuständig. Da ist auch der Unterschied zum TMemIniFile. Sobald ich im TIniFile eine Wert schreibe ist dieser im File enthalten. Beim TMemIniFile wird das File erst beim Free gespeichert. Das lädt immer das ganze File in den Speicher und schreibt auch wieder das ganze File auf den Disk.

So kann man mit dem TIniFile aus mehreren Progammen gleichzeitig Werte in das Inifile schreiben, ohne dass da was überschieben würde. Beim TMemIniFile steht jeweils nur das drin, was das zuletzt gespeicherte Progamm gespeichert hat. In einer Multiuser Umgebung ist das also sehr ungünstig.

TIniFile schreibt nur die Key/Werte Paare die man will und liest auch nur die, die man will.

Danke nochmals für die Tips.

PS. @TiGü
Dass das OS da das File jeweils öffnet und schliest ist ja logisch. Aber der Unterschied ist halt, dass TIniFile Multiuser/Multiappfähig ist und TMemIniFile nicht.

himitsu 9. Dez 2019 18:31

AW: AnsiString zu String zuweisen ohne Konvertierung?
 
Zitat:

Zitat von Rolf Frei (Beitrag 1453075)
Beim TIniFile gibt es kein LoadFromFile.

Beim TMemIniFile gibt es die StringList,
aber wie schon erwähnt gibt es die WinAPI für INIs als ANSI und Unicode, und da jeder API-Aufruf ein "eigenständiger" Zugriff ist, lassen sich die APIs mischen.

Moombas 10. Dez 2019 07:03

AW: AnsiString zu String zuweisen ohne Konvertierung?
 
Ich würde immer noch eher die IN-Datei im richtigen Format ablegen und gut ist. Kein Programmieraufwand (maximal für das Schreiben dieser, falls überhaupt notwendig).

freimatz 10. Dez 2019 07:17

AW: AnsiString zu String zuweisen ohne Konvertierung?
 
Vermutlich ist es nicht die INI, sondern je eine INI bei 1000 Anwendern ...

TiGü 10. Dez 2019 08:25

AW: AnsiString zu String zuweisen ohne Konvertierung?
 
Zitat:

Zitat von Rolf Frei (Beitrag 1453075)
PS. @TiGü
Dass das OS da das File jeweils öffnet und schliest ist ja logisch. Aber der Unterschied ist halt, dass TIniFile Multiuser/Multiappfähig ist und TMemIniFile nicht.

DAAAAS...ist übrigens eine ganz ganz andere Anforderung, als was du ursprünglich gefragt hattest.

Davon abgesehen:
Was ist das denn? Da schreiben X Benutzer parallel auf einer einzelnen Datei? Wirklich?
Das muss dir doch schon drölfzigmal um die Ohren geflogen sein.

Oder ist es so, wie freimatz vermutet, und jeder Windows-Benutzer hat eine eigene INI-Datei (die hoffentlich in seinem Benutzer spezifischen Ordner liegen)?


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:56 Uhr.
Seite 4 von 4   « Erste     234   

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