Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi INI aus Memorystream (https://www.delphipraxis.net/108525-ini-aus-memorystream.html)

hedie 15. Feb 2008 12:37


INI aus Memorystream
 
Hallo

Ich habe ein INI File mit AES - Rijndael verschlüsselt.
Nun möchte ich die Datei in meinem Programm wieder entschlüsseln, das klappt auch ganz gut
aber wenn ich nun die datei einfach speichere, unverschlüsselt!, dan könnte ich das ding auch gleich ohne AES
machen..

Deshalb nun die frage, wie kann ich mit TInifile auf einen Stream zugreifen?

weil dan würde ich die AES Datei in einen Stream entschlüsseln und diesen Laden....


Danke schonmal

Nuclear-Ping 15. Feb 2008 12:46

Re: INI aus Memorystream
 
Gabs da nicht TMemIniFile oder sowas?

sirius 15. Feb 2008 12:47

Re: INI aus Memorystream
 
Vielleicht mit TMemInifile und der Methode setStrings

Edit: @NP: Ja, gabs. Ich hatte vorsichtshalber nochmal nachgesehen. :lol:

Nuclear-Ping 15. Feb 2008 12:49

Re: INI aus Memorystream
 
Hab grad mal in der Hilfe geguckt. Der Constructor erwartet auch 'nen Dateinamen.
Zitat:

Zitat von Delphi-Hilfe
TMemIniFile puffert im Gegensatz zum TIniFile-Objekt, das auch die Daten der INI-Datei kapselt, alle an der INI-Datei vorgenommenen Änderungen.

Scheint also auch nicht das richtige zu sein.

hedie 15. Feb 2008 12:51

Re: INI aus Memorystream
 
Jo

Also wenn ich TMemIniFile mache, dan kommt genau auch .Create(TFileName)

Somit is das nicht das richtige....

marabu 15. Feb 2008 12:51

Re: INI aus Memorystream
 
SetStrings() war schon richtig:

Delphi-Quellcode:
procedure LoadFromStream(ini: TMemIniFile; stream: TStream);
var
  s: TStrings;
begin
  s := TStringList.Create;
  try
    s.LoadFromStream(stream);
    ini.SetStrings(s);
  finally
    s.Free;
  end;
end;


var
  ini: TMemIniFile;
begin
  ini := TMemIniFile.Create('');
  // ...
end;
Freundliche Grüße

Nuclear-Ping 15. Feb 2008 12:53

Re: INI aus Memorystream
 
Funzt das mit nem leeren Dateinamen echt?

hedie 15. Feb 2008 13:38

Re: INI aus Memorystream
 
Ich hab das nun mal so getestet

Delphi-Quellcode:
procedure LoadFromStream(ini: TMemIniFile; stream: TStream);
var
  s: TStrings;
begin
  s := TStringList.Create;
  try
    s.LoadFromStream(stream);
    ini.SetStrings(s);
  finally
    s.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ini: TMemIniFile;
  str:tfilestream;
begin
str := tfilestream.Create('test.ini',fmOpenRead);
LoadFromStream(ini,str);
ini := TMemIniFile.Create('');
edit1.Text := ini.ReadString('test','test','error');
ini.Free;
str.Free;
end;
Doch leider bekomme ich eine Zugrifsverletzung....

Über die verwendung von LoadFromStream bin ich mir nicht so ganz im klaren...
Was muss ich genau bei INI übergeben?

Danke schonmal... Und Danke für den Code

DeddyH 15. Feb 2008 13:40

Re: INI aus Memorystream
 
Zitat:

Delphi-Quellcode:
LoadFromStream(ini,str);
ini := TMemIniFile.Create('');

Fällt Dir etwas auf? Du versuchst, eine MemIniFile zu befüllen, bevor Du sie erzeugst ;)

hedie 15. Feb 2008 13:42

Re: INI aus Memorystream
 
tatsächlich... :D

Es hat geklappt...

Wer hätte das gedacht :D

Vielen Vielen Dank an alle....

FrankBrin 8. Mai 2008 14:16

Re: INI aus Memorystream
 
Hallo,
ich habe diese Funktion bei mir auch implementiert. Allerdings unter RAD2007.
Doch leider geschieht folgendes:
Stream wird korrekt an LoadFromStream übergeben.
s wird Created
und bei s.LoadFromStream(Stream) passiert einfach nix. s bleibt leer.

Keine Fehlermeldung, keine Exception - einfach nix.

Hat jemand eine Vorstellung woran das liegen könnte.

Gruß Frank.
P.S. Mein Stream kommt von einem IdFtpClient und ist ein StringStream!

himitsu 8. Mai 2008 14:21

Re: INI aus Memorystream
 
hast du auch die StreamPosition zurückgesetzt?

s.Position := 0; oder so

FrankBrin 8. Mai 2008 14:27

Re: INI aus Memorystream
 
Hallo himitsu,
du bist so gut zu mir.
Ein kleines

Stream.Position := 0;

und die Welt ist wieder in Ordnung.

Tausend Dank

Gruß
Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz