![]() |
Inhalt einer HTTP-Datei direkt in String laden
Hi,
da ich dummerweise im Moment nicht über MS XML an meine XML-Daten komme, sondern auf eine Bibliothek zurückgreifen muss, die nur lokale Dateien oder einen XML-String verarbeiten kann, möchte ich die XML-Datei direkt in den Speicher laden. Entweder in einen Stream oder in einen String. Gibt es dafür API-Funktionen? Indys sind keine Lösung. ;) Chris |
Re: Inhalt einer HTTP-Datei direkt in String laden
Mit was lädst du die Datei?
INDY LoadToStream |
Re: Inhalt einer HTTP-Datei direkt in String laden
Hi,
noch gar nicht. Ich will ja gerade über HTTP an die Datei herankommen. Und eben nicht über die Indys, sondern über API-Funktionen. ;) Chris |
Re: Inhalt einer HTTP-Datei direkt in String laden
Wo liegen die Dateien?
|
Re: Inhalt einer HTTP-Datei direkt in String laden
Warscheinlich auf einem HTTP-Server ;)
|
Re: Inhalt einer HTTP-Datei direkt in String laden
Ich hab
![]() |
Re: Inhalt einer HTTP-Datei direkt in String laden
Hi,
ja, auf die WinINet-Komponenten bin ich auch gerade gestoßen. Meine Lösung sieht so aus:
Delphi-Quellcode:
Das funktioniert auch wunderbar - zumindest für das was es soll. :?
var
hSession, hXmlFile: hInternet; pCode: array[1..10] of WideChar; dwCodeLen, dwIndex, dwNumToRead, dwRead: Cardinal; buf: array[0..MAX_CACHE_ENTRY_INFO_SIZE] of WideChar; begin Result := ''; // Internet-Session öffnen hSession := InternetOpen('XmlDownloader/1.0', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); // Fehlgeschlagen if (hSession = nil) then begin raise Exception.Create('Konnte keine Verbindung zum Internet herstellen.'); Exit; end; // URL öffnen hXmlFile := InternetOpenUrl(hSession, PChar(DataURL), nil, 0, INTERNET_FLAG_RELOAD or INTERNET_FLAG_NO_CACHE_WRITE or INTERNET_FLAG_NO_COOKIES, 0); if (hXmlFile = nil) then begin raise Exception.Create('Verbindung zur XML-Datei fehlgeschlagen.'); Exit; end; // Verfügbarkeit überprüfen dwIndex := 0; dwCodeLen := 10; HttpQueryInfo(hXmlFile, HTTP_QUERY_STATUS_CODE, @pCode, dwCodeLen, dwIndex); if not ((PChar(@pCode) = '200') or (PChar(@pCode) = '302')) then begin raise Exception.Create('Die Datei konnte nicht geladen werden. Fehler: ' + PChar(@pCode)); Exit; end; dwNumToRead := SizeOf(buf)-1; // Datei zusammensetzen while (InternetReadFile(hXmlFile, @buf, dwNumToRead, dwRead)) do begin if dwRead = 0 then break; // Null-terminieren buf[dwRead] := #0; Result := Result + WideString(@buf); end; // Handle wieder schließen InternetCloseHandle(hXmlFile); InternetCloseHandle(hSession); end; Danke trotzdem für deine Unit, Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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