AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Download Tool

Ein Thema von BackYard · begonnen am 10. Nov 2005 · letzter Beitrag vom 10. Nov 2005
Antwort Antwort
Seite 1 von 2  1 2      
BackYard

Registriert seit: 10. Nov 2005
35 Beiträge
 
#1

Download Tool

  Alt 10. Nov 2005, 14:44
Hi, ich hab hier mal was im Forum gefunden und mal ausprobiert.
Leider geht das ganze nicht.
Ich bekomme weder einen Fehler noch irgend was anderes, wenn ich den Button 1 Klick, passiert 0.

Kann sich das mal einer anschauen?

Delphi-Quellcode:
unit by;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    StatusBar1: TStatusBar;
    Progress: TProgressBar;
    SpeedLabel: TLabel;
    Status: TLabel;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    IdHTTP: TIdHTTP;
    Label1: TLabel;
  private
    FTime: Longword; //Beide Variablen werden für die kb/sec anzeige gebraucht
    FBytes: Longword;
    procedure IdHTTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);
    procedure Button1Click(Sender: TObject);
    procedure IdHTTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

const
  cFileSplitSize : Int64 = 40*1024; //40 KB größe stücke wird die Datei zerhackt
  
implementation

{$R *.dfm}

function GetSizeName(const Size : int64): String;
begin
  Result := 'Fehler';
  if Size = -1 then exit;
  if Size < 1024 then
  begin
    Result := inttostr(Size)+' Byte';
    exit;
  end;
  if (1024 <= Size) and (Size < 1048576) then
  begin
    Result := floattostr((round((Size/1024)*100))/100)+' KB';
    exit;
  end;
  if (1048576 <= Size) and (Size < 1099511627776) then
  begin
    Result := floattostr((round((Size/1048576)*100))/100)+' MB';
    exit;
  end;
  if Size > 1099511627776 then
  begin
    Result := floattostr((round((Size/1099511627776)*100))/100)+' GB';
  end;
end;


procedure TForm1.IdHTTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer);
begin
  FTime := GetTickCount;
  FBytes := 0;
  Application.ProcessMessages;
end;

procedure TForm1.IdHTTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);
begin
  if not((GetTickCount - FTime) <= 0) then
  begin
    try
      SpeedLabel.caption := Format('%.2f KB/s', [(AWorkCount - FBytes) / (GetTickCount - FTime)]);
    except
    end;
  end;
  FTime := GetTickCount;
  FBytes := AWorkCount;
  Application.ProcessMessages;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  BytesKopiert, BytesInsgesamt : int64;
  lStream: TFileStream;
begin
  //Initialiesieren
  Status.Caption := '';
  BytesKopiert := 0;
  Progress.Position := 0;
  //In edit 1 steht die downzuladene Datei (z.b. [url]http://www.server.com/datei.dat[/url])
  Status.Caption := 'Prüfe Header';
  // Durch die zwei nächsten Befehle wird die Größe ermittelt und ihn der Variable BytesInsgesamt abgespeichert
  IdHTTP.Head(Edit1.Text);
  BytesInsgesamt := IdHTTP.Response.ContentLength;
  //Wenn die Indy Komponente -1 zurückgibt dann bedeutet es des der die Dateigröße nicht zu verfügung
  //stellt uns somit kann die Datei ganz normall heruntergeladen werden (ohne Fortschrittsanzeige)
  if BytesInsgesamt = -1 then
  begin
    Status.Caption := 'Normalles herunterladen';
    Status.Caption := 'Erstelle Datei';
    //In Edit 2 steht welche Datei (z.b. C:\datei.dat)
    //Datei erstellen
    lStream:=TFileStream.Create(Edit2.Text, fmCreate or fmShareDenyNone);
    try
      //und "normal" herunterladen
      idHTTP.Get(Edit1.Text, lStream);
    finally
      if Assigned(lStream) then lStream.Free; //FileStream freigeben wenn gesetzt
    end;
    //Alles auf fertig stellen
    Status.Caption := 'Fertig';
    SpeedLabel.caption := 'Fertig';
    exit;
  end;
  //Also wenn wir hier angelangt sind dann bedeutet es der Server hat uns die Dateigröße zur Verfügung gestellt.
  Progress.Max := BytesInsgesamt;
  Status.Caption := 'Erstelle Datei';
  //In Edit 2 steht welche Datei (z.b. C:\datei.dat)
  //Datei erstellen
  lStream:=TFileStream.Create(Edit2.Text, fmCreate or fmShareDenyNone);
  lStream.Position := 0;
  try
    repeat
      // Damit sich das Programm nicht aufhängt
      Application.ProcessMessages;
      //Nun setzen wir den Start nach die bereits kopierten Bytes
      IdHTTP.Request.ContentRangeStart := BytesKopiert;
      //Hier wird gebrüft ob die restlichen Bytes größer sind als cFileSplitSize
      if (BytesInsgesamt-BytesKopiert) > cFileSplitSize then
      begin
        //Hier wird einmal die cFileSplitSize eingestellt
        IdHTTP.Request.ContentRangeEnd := BytesKopiert+cFileSplitSize-1;
      end
      //Den rest der Datei
      else IdHTTP.Request.ContentRangeEnd := BytesInsgesamt;
      Application.ProcessMessages;
      //Den eingesttelten Teil herunterladen und ihn die Datei speichern
      IdHTTP.Get(Edit1.Text, lStream);
      //Progress und Status aktualliesieren
      Progress.Position := BytesKopiert;
      Status.Caption := GetSizeName(BytesKopiert)+'/'+GetSizeName(BytesInsgesamt);
      //BytesKopiert weiter setzen
      BytesKopiert := BytesKopiert+cFileSplitSize;
    until (BytesKopiert >= BytesInsgesamt); //Schleife beenden wenn datei fertig
  finally
    if Assigned(lStream) then lStream.Free; //FileStream freigeben wenn gesetzt
  end;
  //Alles auf fertig stellen
  Status.Caption := 'Fertig';
  SpeedLabel.caption := 'Fertig';
  Progress.Position := 100;
end;

end.
Wäre net danke.
  Mit Zitat antworten Zitat
10. Nov 2005, 14:45
Dieses Thema wurde von "Luckie" von "Sonstige Fragen zu Delphi" nach "Internet / LAN / ASP.NET" verschoben.
Ist doch eindeutig, dass es um Internet geht, warum steht das hier bei \\"Sonstiges\\"?
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#3

Re: Download Tool

  Alt 10. Nov 2005, 14:47
klick mal deinen button1 im form zur design-zeit doppelt an. vielleicht ist ihm nicht die Button1Click Methode zugewiesen?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Download Tool

  Alt 10. Nov 2005, 14:47
Zitat von BackYard:
Hi,
Ich bekomme weder einen Fehler noch irgend was anderes, wenn ich den Button 1 Klick, passiert 0.
Dann geh das ganze doch mal mit F7 Schritt für Schritt durch und guck, wo er aussteigt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
BackYard

Registriert seit: 10. Nov 2005
35 Beiträge
 
#5

Re: Download Tool

  Alt 10. Nov 2005, 15:00
also der button ist richtig zugewiesen.

mit F7 steigt er bei: Application.Run;
aus.
:<
  Mit Zitat antworten Zitat
BackYard

Registriert seit: 10. Nov 2005
35 Beiträge
 
#6

Re: Download Tool

  Alt 10. Nov 2005, 15:06
hmm, jetzt geht gar nix mehr . .

Im Project by_.exe ist eine Exception der Klasse EReadError aufgetretten. Meldung:
'Ungültiger Eigenschaftswert'. Prozess wurde angehalten . . . .


Fehler beim lesen von Button1.OnClick

hmm was bedeutet das jetzt genau?
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#7

Re: Download Tool

  Alt 10. Nov 2005, 15:15
Mach mal die Deklaration für die Button1Click Prozedur über dem Schlagwort Private rein...

[Edit] Das gilt im Zweifelsfall natürlich auch für die beiden Anderen...[/Edit]


MfG

Toni
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
BackYard

Registriert seit: 10. Nov 2005
35 Beiträge
 
#8

Re: Download Tool

  Alt 10. Nov 2005, 15:23
okay jetzt kann ich ihn wennigstens wieder öffnen, aber delphi friert er ein wenn ich den button 1 click, nach ner zeit kommt ein fehler:

EIdSocketError . . . Meldung Socket-Fehler # 10060
  Mit Zitat antworten Zitat
BackYard

Registriert seit: 10. Nov 2005
35 Beiträge
 
#9

Re: Download Tool

  Alt 10. Nov 2005, 15:24
kann es sein das jetzt alles tut nur das das proxy hinter dem ich sitz, die indy komponente net raus lässt?
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#10

Re: Download Tool

  Alt 10. Nov 2005, 15:25
Ja, das bekomme ich auch... Was steht denn in deinem Edit1 drin?

Bei mir ist nämlich immernoch der String "Edit1" drin. Und dass das ein gültiger header für die Socketvervindung ist kann ich mir nur schwer vorstellen...

Toni


BTW: Benutz doch bitte die Edit-Funktion, ja?
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:14 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