AGB  ·  Datenschutz  ·  Impressum  







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

Dateigröße auslesen

Ein Thema von robertthronhill · begonnen am 25. Mai 2004 · letzter Beitrag vom 27. Mai 2004
 
robertthronhill

Registriert seit: 19. Sep 2003
15 Beiträge
 
#1

Dateigröße auslesen

  Alt 25. Mai 2004, 16:47
Hallo!

Mein Problem ist folgendes:
Ich programmiere zur Zeit an einem Programm mit dem man chatten und Dateien versenden kann. Alles funktioniert prima, aber ich möchte nun einen Fortschrittsbalken einbauen, dass man etwa weis, wann die Datei fertig up-/downgeloadet ist. Ich verwende dazu die delphieigene Fortschrittsanzeige Progressbar.
1. Fall (Download; wenn man eine Datei geschickt bekommt):
Wenn man eine Datei geschickt bekommt sieht die Delphiprocedure so aus:
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  fs: TFileStream;
  SizeOfIncomingStream: integer;
begin
  if not SaveDialog1.Execute then exit;
  fs := TFileStream.Create(SaveDialog1.Filename, fmCreate or fmShareExclusive);
  with AThread.Connection do
    try
      SizeOfIncomingStream := ReadInteger;
      ReadStream(fs, SizeOfIncomingStream);
    finally
      Disconnect;
      fs.Free;
    end;
end;
Um die Progressbar nun zum laufen zu bringen verwende ich folgende "Formel":
Code:
Progressbar.Position:=(erhalteneBytes*100)div gesammteBytes
Wie lese ich nun die schon erhaltenen Bytes (=die Dateigröße) aus. Mein Problem an der Sache ist vorallem, dass ich nicht weis, wie ich den Namen der Datei aus dem SaveDialog heraus bekomme. Außerdem habe ich keine Ahnung wie ich aus einer Datei die Dateigröße auslese.

2.Fall (Upload; man schickt jemandem eine Datei)
Hierzu sieht mein Sourcecode so aus:
Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
var
  fs: TFileStream;
begin
  if not OpenDialog1.Execute then exit;
  with IdTCPClient1 do
  begin
    fs := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyWrite);
    Connect;
    try
      OpenWriteBuffer;
      try
        WriteStream(fs, true, true);
        CloseWriteBuffer;
      except
        CancelWriteBuffer;
        raise;
      end;
    finally
      Disconnect;
      fs.Free;
    end;
  end;
end;
Dieses mal möchte ich wieder eine Progressbar haben, die anzeigt, wie weit der Upload ist. "Formel":
Code:
Progressbar.Postition:=(gesendeteBytes*100)div gesammteBytes
Ich glaube, dass dieser Fall ein weitaus schwierigeres Problem ist, als der 1.. Dieses Mal habe ich noch weniger Ahnung als beim 1. Fall. Muss ich da irgendwie die gesendeten Bytes in einer Variablen mitzählen, oder gibt es da einen anderen (einfacheren) Weg. Wenn ich die Bytes mitzählen lassen muss, wie mache ich das dann? Kann ich das mit dem IndyClient machen?

Puh, das ist ein großer Beitrag.
Danke schon mal im Vorraus für euere Hilfe

mfg
robertthronhill

P.S.: Ich weis, dass ich den Code aus der Codelibrary kopiert habe .
  Mit Zitat antworten Zitat
 


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 15:35 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