Autor Beitrag
JustusJonas
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 222



BeitragVerfasst: Mi 16.07.08 11:08 
Hallo Leute,

ich habe ein Problem beim herunterladen einer Datei aus dem Internet.

Hier mal die Funktion, die ich bei den Schweizern gefunden habe:
ausblenden volle Höhe Delphi-Quelltext
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 + 1of Char;
  dwBytesRead: DWORD;
begin
  Result := False;
  // hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
  hSession := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nilnil0);
  try
    if Assigned(hSession) then
    begin
      hService := InternetOpenUrl(hSession, PChar(aUrl), nil000);
      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 user profile iconNarses: Code- durch Delphi-Tags ersetzt
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 16.07.08 12:13 
Das Problem wird wohl an dieser Zeile liegen:

ausblenden Delphi-Quelltext
1:
slDaten.Add(lpBuffer);					

Mit der Funktion Add() wird nun mal eine neue Zeile innerhalb der StringListe erzeugt. Versuche es doch mal so:

ausblenden Delphi-Quelltext
1:
slDaten.Text := slDaten.Text + lpBuffer;					


Gruß
Tino