wiedermal ini und Stream Prob
-
Guten Abend
TMemoryStream *result = new TMemoryStream(); IdHTTP1->Get("http://www.web.de/ini.ini", result); TMemIniFile *ini = new TMemIniFile(???);Wenn ich die ??? mit
IdHTTP1->Get("http://www.web.de/ini.ini", result)ersetze, dann wird es ohne Fehler kompiliert, aber es bringt dennoch nichts.
Wenn ich die Fragezeichen nun mit result fülle, dann gehts nicht.
Ich weiß aber net wieso.result->SaveToFile("neue.ini");das geht, es sind die gleichen Daten enthalten.
WebVersion = ini->ReadString("Config", "Build", "");Ich bekomme kein Wert für WebVersion, das ist ein AnsiString.
von welchem Typ muss das ding sein, also dort wo die Fragezeichen sind?
Ist doch ein MemoryStream, aber das scheint es ja nicht zu sein.Danke für die Hilfe
-
Wie das 'File' im Namen schon andeutet können TIniFile/TMemIniFile nur mit Dateien umgehen, nich mit Streams. Du musst dein HTTP-Result also auf Platte speichern und dann von dort laden.
Zur Bedeutung des 'Mem' in TMemIniFile lies einfach nochmal in der Hilfe nach.
-
@Jansen: Ich kann der Frage jetzt nicht direkt nachgehen, da ich im Moment keine VCL-Doku zur Verfügung habe, aber wäre es nicht möglich, einen Stream an ein Ini-File-Objekt zu assignen?
-junix
-
junix schrieb:
@Jansen: Ich kann der Frage jetzt nicht direkt nachgehen, da ich im Moment keine VCL-Doku zur Verfügung habe, aber wäre es nicht möglich, einen Stream an ein Ini-File-Objekt zu assignen?
-junix
Jansen, Dein Typ war gefragt...

Ich stehe gerade vor genau der selben Frage. Ich finds einfach unelegant den Stream auf der Platte zu speichern um TInifile nutzen zu können...
-
Dann parse die Streamdaten doch selbst. Dann brauchst Du auch nicht auf die Platte zu speichern.
-
Hallo,
Man kann keinen Stream an ein TIniFile-Objekt übergeben. Die Klasse TIniFile kapselt intern auch nur WinAPI-Funktionen die wiederum direkt auf eine Datei zugreifen (GetPrivateProfileString, WritePrivateProfileString). TMemIniFile wiederum speichert die gesamte Inidatei in einer TStringList ab und greift dann darauf zu. Dieses TStringList-Objekt ist allerdings private. Wenn man nicht zwischenspeichern will muss man also selber parsen (wie Joe schon sagte). Man könnte auch eine Klasse dafür schreiben.
-
Braunstein schrieb:
Wenn man nicht zwischenspeichern will muss man also selber parsen (wie Joe schon sagte). Man könnte auch eine Klasse dafür schreiben.
Kann dem Problem immer noch nicht näher nachgehen, aus dem selben Grund aber gross zu Parsen gibts ja bei TStringList eigentlich nciht.. Ich denke da an TSTringList::Values und TStringList::names, etc...
-
Das ist schon richtig. Man müsste allerdings noch die Datei in die einzelnen Sections aufteilen. Alles weitere könnte man TStringList überlassen.