Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Ohne Zwischenspeicherung Ini-Datei downloaden und einlesen (https://www.delphipraxis.net/110883-ohne-zwischenspeicherung-ini-datei-downloaden-und-einlesen.html)

TheMiller 26. Mär 2008 10:05


Ohne Zwischenspeicherung Ini-Datei downloaden und einlesen
 
Hallo,

bin gerade dabei, eine Update-Unit für mein Programm zu schreiben. Um die verügbaren Updates anzuzeigen, möchte ich eine Ini-Datei von meinem Server downloaden und den Inhalt einlesen. Download geschieht durch IdHTTP in Verbindung mit einem Filestream.

Wenn alles gut geht, habe ich die Datei im Filestream. Wie kann ich jetzt über Inifiles die Datei öffnen, ohne sie erst mit dem FileStream auf der Festplatte des Clients speichern zu müssen? Geht das überhaupt?

Danke!

Bernhard Geyer 26. Mär 2008 10:08

Re: Ohne Zwischenspeicherung Ini-Datei downloaden und einles
 
Gibts da nicht ein TMemIni-Klasse (oder so ähnlich) :gruebel:

Die Muhkuh 26. Mär 2008 10:10

Re: Ohne Zwischenspeicherung Ini-Datei downloaden und einles
 
TMemIniFile ;)

Daniel 26. Mär 2008 10:11

Re: Ohne Zwischenspeicherung Ini-Datei downloaden und einles
 
Ja, die gibt's. Aber mit Streams kann die auch nicht so recht.

Ich würde eine TStringList nehmen (Methode "LoadfromStream") und dann flugs selber parsen.

Klaus01 26. Mär 2008 10:12

Re: Ohne Zwischenspeicherung Ini-Datei downloaden und einles
 
.. ja, TMemIniFile.SetStrings

Zitat:

Zitat von DelphiHilfe
procedure SetStrings(List: TStrings);

Description

Call SetStrings to populate the in-memory copy of the INI file data with the contents of a string list.

List is a string list object, created and maintained by the application, from which the INI file data is copied.

SetStrings uses the Clear method to erase any existing INI file data prior to copying the new data.

SetStrings can be used to reread data from the INI file from disk after it is erased with the Clear method. The LoadFromFile method of a string list can be used to retrieve the contents of the INI file and then SetStrings can copy the data into the memory buffer
.


Grüße
Klaus

TheMiller 26. Mär 2008 10:12

Re: Ohne Zwischenspeicherung Ini-Datei downloaden und einles
 
Das ist ja Klasse! Kannte ich noch garnicht.

Die Benutzung ist - nehme ich mal an - genauso, wie bei der "richtigen" Ini-Klasse!

Dankeschön!


[EDIT]Hm... ich will ja auch nur lesen. Nicht in die Ini-Schreiben. Die Daten sollen mir nur die Updates anzeigen[/EDIT]

Die Muhkuh 26. Mär 2008 10:13

Re: Ohne Zwischenspeicherung Ini-Datei downloaden und einles
 
Zitat:

Zitat von DJ-SPM
Die Benutzung ist - nehme ich mal an - genauso, wie bei der "richtigen" Ini-Klasse!

Ist genau so ;)

TheMiller 26. Mär 2008 17:45

Re: Ohne Zwischenspeicherung Ini-Datei downloaden und einles
 
Ich kann die Ini-Datei jetzt downloaden, aber ich bekomme einen weiteren Eintrag, der garnicht in der Ini steht. Die Ini hat nur einen Eintrag, angezeigt bekomme ich 2. Der letzte besteht aus irgendwelchen Hieroglyphen...

Delphi-Quellcode:
Updates:=TStringList.Create;
  try
    Updates.Text:=www.Get('http://server/updates.ini');
  finally
    [url]www.free;[/url]
  end;
  ini:=TMemIniFile.Create('');
  ini.SetStrings(Updates);
  Updates.Clear;
  ini.ReadSections(Updates);
Ist der Code falsch?

Klaus01 26. Mär 2008 18:59

Re: Ohne Zwischenspeicherung Ini-Datei downloaden und einles
 
Guten Abend,

ich habe das mal kurz getestet, ohne TMemIni - weil da sieht man ja nichts.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 MemStream :TMemoryStream;
begin
  MemStream := TMemoryStream.Create;
  idhttp1.Get('http://...../test.ini',MemStream);
  MemStream.Position:=0;
  Memo1.Lines.LoadFromStream(MemStream);
  MemStream.free;
end;
Das oben beschriebene klappt bei mir, ohne irgendwelchen merkwürdigen Zeichen.


Grüße
Klaus

TheMiller 26. Mär 2008 20:03

Re: Ohne Zwischenspeicherung Ini-Datei downloaden und einles
 
Jap, ich war nur blöd... :wall:

Der Wert kam aus einem Array-Eintrag den es irgendwie nicht gegeben hat. Ein -1 hat geholfen!

Sorry!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 Uhr.

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