Hallo Leute,
ich habe ein Problem beim herunterladen einer Datei aus dem Internet.
Hier mal die Funktion, die ich bei den Schweizern gefunden habe:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| function TForm1.DownloadURL(const aUrl: string): Boolean; var hSession: HINTERNET; hService: HINTERNET; lpBuffer: array[0..1024 + 1] of Char; dwBytesRead: DWORD; begin Result := False; hSession := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try if Assigned(hSession) then begin hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, 0, 0); if Assigned(hService) then try while True do begin dwBytesRead := 1024; InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead); if dwBytesRead = 0 then break; lpBuffer[dwBytesRead] := #0; slDaten.Add(lpBuffer); end; Result := True; finally InternetCloseHandle(hService); end; end; finally InternetCloseHandle(hSession); end; end; |
Nun habe ich aber das Problem, dass in meiner StringList - sehe ich ja, wenn ich die StringList speichere - dass nach genau 1024 Zeichen ein Zeilenumbruch in der Datei gemacht wird. Das machts mir natürlich schwer die Datei danach zu verarbeiten.
Es sind ca. 100.000 Zeichen in meiner Datei und die bräuchte ich halt ohne zusätzlichen Zeilenumbruch. Wie gesagt, alle 1024 Zeichen wird automatisch ein Zeilenumbruch gemacht. Setze ich den Buffer der Funktion auf 2048 wird alle 2048 Zeichen ein Zeilenumbruch gemacht. Aber zu hoch kann ichs auch nicht setzen, dann kommt ein Stack-Fehler.
Mit der HTTP-Komponente von Indy hab ichs auch schon versucht, der bringt mir einen IO-Fehler. Sehr wahrscheinlich, weil die URL des Downloads relativ kryptisch ist und nicht direkt auf eine Datei zeigt. Hat jemand eine Idee?
Greetz
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt