AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Problem mit Dateigrösse nach SplitDownload (Indy HTTP)
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Dateigrösse nach SplitDownload (Indy HTTP)

Offene Frage von "GeMo"
Ein Thema von GeMo · begonnen am 25. Jan 2006
Antwort Antwort
GeMo

Registriert seit: 25. Jan 2006
80 Beiträge
 
Delphi 7 Professional
 
#1

Problem mit Dateigrösse nach SplitDownload (Indy HTTP)

  Alt 25. Jan 2006, 12:57
hallo zusammen... ich bin neu hier und hab ein kleines Problem!
Mein Programm soll per IdHTTP eine Datei aus dem Internet gesplittet in einen TMemoryStream herunterladen und das ganze am Ende des Downloadprozesses wieder zusammen fügen und in einer Datei speichern. Eigentlich klappt das auch ganz gut, nur dass die Memorystreams immer genau dieselbe größe haben wie der datei auf dem Webserver. Somit wird die Dateigröße am Ende quasi multipliziert mit der Anzahl der Streams.
Das ganze läuft bei mir über Downloadthreads und es können maximal 3 Dl-Threads gleichzeitig laufen.

Also meine Frage:
Wie bekomme ich es hin, dass die heruntergeladene Datei am ende die selbe größe hat, wie die originale Datei? Also wie werden die MemoryStreams kleiner?

Der Code:
Delphi-Quellcode:
procedure TDownload.down;
var
  beg, endo: Int64;
  xblub : Integer;
  yblub : Integer;
  copStream : TMemoryStream;

begin
    xblub := 1;
    yblub := 1;
    beg := 0;
    endo := 0;
    Form9.IdHTTP.Head(url + datei + endung);
    bytesIns := Form9.IdHTTP.Response.ContentLength;
    bytesCop := 0;
    repeat
      if(laufendes < 3) then
      begin
      Application.ProcessMessages;
      beg := bytesCop;
      if (bytesIns-bytesCop) > cFileSplitSize then
      begin
        endo := BytesCop+cFileSplitSize;
      end
      else endo := BytesIns;
      Application.ProcessMessages;
      if(endo-beg >= 0) then
      begin
          inc(laufendes);
          dow[xblub] := TDL.create;
          dow[xblub].setS(beg);
          dow[xblub].setE(endo);
          dow[xblub].ide := xblub;
          dow[xblub].Resume;
          inc(xblub);
      end;
      //Progress und Status aktualliesieren
      Application.ProcessMessages;
      Form9.ProgressBar1.Position := gedownloaded;
      Form9.Label3.Caption := 'Status: ' + GetSizeName(gedownloaded)+'/'+GetSizeName(BytesIns);
      BytesCop := BytesCop + cFileSplitSize;
    end;
    until (beg >= endo); //Schleife beenden wenn datei fertig

    while(laufendes > 0) do
    begin
    end;

    lStream := TFileStream.Create(dl, fmCreate);
    lStream.position := 0;
    while(yblub < xblub) do
    begin
        copStream := dow[yblub].dStream;
        try
          copStream.SaveToStream(lstream);
        finally
         inc(yblub);
         copStream.free;
        end;
     end;
    lStream.free;

    Form9.Label3.Caption := 'Status: 100%';
    Form9.Button1.Caption := 'Download';
    Form9.ProgressBar1.Position := 0;
    Form9.Button1.enabled := true;
    Form9.Button2.enabled := true;
    Form9.Edit2.Enabled := true;
end;
Hier ist der Code für das erstellen der MemoryStreams:
Delphi-Quellcode:
procedure TDL.dl;
begin
      dStream := TMemoryStream.Create();
      dStream.position := 0;
      Id.get(url + data + endung, dStream);
      dec(laufendes);
      gedownloaded := gedownloaded + (Id.Request.ContentRangeEnd - Id.Request.ContentRangeStart);
      Form9.ProgressBar1.Position := gedownloaded;
      Form9.Label3.Caption := 'Status: ' + GetSizeName(gedownloaded)+'/'+GetSizeName(BytesIns);
      Application.ProcessMessages;
end;

Der Anfangs und Endpunkt für die Streams wird in folgenden Methoden gesetzt (Aufgerufen in TDownload.down):
Delphi-Quellcode:
procedure TDL.setS(start:Int64);
begin
  Id.Request.ContentRangeStart := start;
  st := start;
end;

procedure TDL.setE(ende:Int64);
begin
  Id.Request.ContentRangeEnd:= ende;
  en := ende;
end;
Ich hoffe mir kann jemand helfen!
greetz GeMo
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:45 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